shift.ll 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. ; RUN: opt < %s -constprop -S | FileCheck %s
  2. ; CHECK-LABEL: shift_undef_64
  3. define void @shift_undef_64(i64* %p) {
  4. %r1 = lshr i64 -1, 4294967296 ; 2^32
  5. ; CHECK: store i64 undef
  6. store i64 %r1, i64* %p
  7. %r2 = ashr i64 -1, 4294967297 ; 2^32 + 1
  8. ; CHECK: store i64 undef
  9. store i64 %r2, i64* %p
  10. %r3 = shl i64 -1, 4294967298 ; 2^32 + 2
  11. ; CHECK: store i64 undef
  12. store i64 %r3, i64* %p
  13. ret void
  14. }
  15. ; CHECK-LABEL: shift_undef_65
  16. define void @shift_undef_65(i65* %p) {
  17. %r1 = lshr i65 2, 18446744073709551617
  18. ; CHECK: store i65 undef
  19. store i65 %r1, i65* %p
  20. %r2 = ashr i65 4, 18446744073709551617
  21. ; CHECK: store i65 undef
  22. store i65 %r2, i65* %p
  23. %r3 = shl i65 1, 18446744073709551617
  24. ; CHECK: store i65 undef
  25. store i65 %r3, i65* %p
  26. ret void
  27. }
  28. ; CHECK-LABEL: shift_undef_256
  29. define void @shift_undef_256(i256* %p) {
  30. %r1 = lshr i256 2, 18446744073709551617
  31. ; CHECK: store i256 undef
  32. store i256 %r1, i256* %p
  33. %r2 = ashr i256 4, 18446744073709551618
  34. ; CHECK: store i256 undef
  35. store i256 %r2, i256* %p
  36. %r3 = shl i256 1, 18446744073709551619
  37. ; CHECK: store i256 undef
  38. store i256 %r3, i256* %p
  39. ret void
  40. }
  41. ; CHECK-LABEL: shift_undef_511
  42. define void @shift_undef_511(i511* %p) {
  43. %r1 = lshr i511 -1, 1208925819614629174706276 ; 2^80 + 100
  44. ; CHECK: store i511 undef
  45. store i511 %r1, i511* %p
  46. %r2 = ashr i511 -2, 1208925819614629174706200
  47. ; CHECK: store i511 undef
  48. store i511 %r2, i511* %p
  49. %r3 = shl i511 -3, 1208925819614629174706180
  50. ; CHECK: store i511 undef
  51. store i511 %r3, i511* %p
  52. ret void
  53. }