vec_sext.ll 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. ; RUN: opt < %s -instcombine -S | FileCheck %s
  2. define <4 x i32> @psignd_3(<4 x i32> %a, <4 x i32> %b) nounwind ssp {
  3. entry:
  4. %cmp = icmp slt <4 x i32> %b, zeroinitializer
  5. %sext = sext <4 x i1> %cmp to <4 x i32>
  6. %sub = sub nsw <4 x i32> zeroinitializer, %a
  7. %0 = icmp slt <4 x i32> %sext, zeroinitializer
  8. %sext3 = sext <4 x i1> %0 to <4 x i32>
  9. %1 = xor <4 x i32> %sext3, <i32 -1, i32 -1, i32 -1, i32 -1>
  10. %2 = and <4 x i32> %a, %1
  11. %3 = and <4 x i32> %sext3, %sub
  12. %cond = or <4 x i32> %2, %3
  13. ret <4 x i32> %cond
  14. ; CHECK-LABEL: @psignd_3
  15. ; CHECK: ashr <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
  16. ; CHECK: sub nsw <4 x i32> zeroinitializer, %a
  17. ; CHECK: xor <4 x i32> %b.lobit, <i32 -1, i32 -1, i32 -1, i32 -1>
  18. ; CHECK: and <4 x i32> %a, %0
  19. ; CHECK: and <4 x i32> %b.lobit, %sub
  20. ; CHECK: or <4 x i32> %1, %2
  21. }
  22. define <4 x i32> @test1(<4 x i32> %a, <4 x i32> %b) nounwind ssp {
  23. entry:
  24. %cmp = icmp sgt <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
  25. %sext = sext <4 x i1> %cmp to <4 x i32>
  26. %sub = sub nsw <4 x i32> zeroinitializer, %a
  27. %0 = icmp slt <4 x i32> %sext, zeroinitializer
  28. %sext3 = sext <4 x i1> %0 to <4 x i32>
  29. %1 = xor <4 x i32> %sext3, <i32 -1, i32 -1, i32 -1, i32 -1>
  30. %2 = and <4 x i32> %a, %1
  31. %3 = and <4 x i32> %sext3, %sub
  32. %cond = or <4 x i32> %2, %3
  33. ret <4 x i32> %cond
  34. ; CHECK-LABEL: @test1
  35. ; CHECK: ashr <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
  36. ; CHECK: xor <4 x i32> %b.lobit, <i32 -1, i32 -1, i32 -1, i32 -1>
  37. ; CHECK: sub nsw <4 x i32> zeroinitializer, %a
  38. ; CHECK: and <4 x i32> %b.lobit, %a
  39. ; CHECK: and <4 x i32> %b.lobit.not, %sub
  40. ; CHECK: or <4 x i32> %0, %1
  41. }