2011-09-05-InsertExtractValue.ll 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. ; RUN: opt < %s -instsimplify -S | FileCheck %s
  2. declare void @bar()
  3. define void @test1() personality i32 (i32, i64, i8*, i8*)* @__gxx_personality_v0 {
  4. entry:
  5. invoke void @bar() to label %cont unwind label %lpad
  6. cont:
  7. ret void
  8. lpad:
  9. %ex = landingpad { i8*, i32 } cleanup
  10. %exc_ptr = extractvalue { i8*, i32 } %ex, 0
  11. %filter = extractvalue { i8*, i32 } %ex, 1
  12. %exc_ptr2 = insertvalue { i8*, i32 } undef, i8* %exc_ptr, 0
  13. %filter2 = insertvalue { i8*, i32 } %exc_ptr2, i32 %filter, 1
  14. resume { i8*, i32 } %filter2
  15. ; CHECK-LABEL: @test1(
  16. ; CHECK-NOT: extractvalue
  17. ; CHECK-NOT: insertvalue
  18. }
  19. declare i32 @__gxx_personality_v0(i32, i64, i8*, i8*)
  20. define { i8, i32 } @test2({ i8*, i32 } %x) {
  21. %ex = extractvalue { i8*, i32 } %x, 1
  22. %ins = insertvalue { i8, i32 } undef, i32 %ex, 1
  23. ret { i8, i32 } %ins
  24. ; CHECK-LABEL: @test2(
  25. }
  26. define i32 @test3(i32 %a, float %b) {
  27. %agg1 = insertvalue {i32, float} undef, i32 %a, 0
  28. %agg2 = insertvalue {i32, float} %agg1, float %b, 1
  29. %ev = extractvalue {i32, float} %agg2, 0
  30. ret i32 %ev
  31. ; CHECK-LABEL: @test3(
  32. ; CHECK: ret i32 %a
  33. }
  34. define i8 @test4(<8 x i8> %V) {
  35. %add = add <8 x i8> %V, bitcast (double 0x319BEB8FD172E36 to <8 x i8>)
  36. %extract = extractelement <8 x i8> %add, i32 6
  37. ret i8 %extract
  38. ; CHECK-LABEL: @test4(
  39. ; CHECK: %[[add:.*]] = add <8 x i8> %V, bitcast (<1 x double> <double 0x319BEB8FD172E36> to <8 x i8>)
  40. ; CHECK-NEXT: %[[extract:.*]] = extractelement <8 x i8> %[[add]], i32 6
  41. ; CHECK-NEXT: ret i8 %[[extract]]
  42. }