brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 39cf125 Raw
64 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=instcombine -S < %s | FileCheck %s3 4; Check that InstCombine can sink instructions to the landingpad of the invoke.5 6define void @t0_noop(i32 %arg) personality ptr @__gxx_personality_v0 {7; CHECK-LABEL: @t0_noop(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()10; CHECK-NEXT:    br i1 [[C]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]11; CHECK:       if.then:12; CHECK-NEXT:    invoke void @simple_throw()13; CHECK-NEXT:    to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]14; CHECK:       invoke.cont:15; CHECK-NEXT:    unreachable16; CHECK:       lpad:17; CHECK-NEXT:    [[EH:%.*]] = landingpad { ptr, i32 }18; CHECK-NEXT:    cleanup19; CHECK-NEXT:    [[V0:%.*]] = add i32 [[ARG:%.*]], 4220; CHECK-NEXT:    call void @consume(i32 [[V0]])21; CHECK-NEXT:    call void @destructor()22; CHECK-NEXT:    resume { ptr, i32 } [[EH]]23; CHECK:       if.end:24; CHECK-NEXT:    [[V1:%.*]] = add i32 [[ARG]], 2425; CHECK-NEXT:    call void @consume(i32 [[V1]])26; CHECK-NEXT:    call void @sideeffect()27; CHECK-NEXT:    ret void28;29entry:30  %c = call i1 @cond()31  %v0 = add i32 %arg, 4232  %v1 = add i32 %arg, 2433  br i1 %c, label %if.then, label %if.end34 35if.then:36  invoke void @simple_throw() to label %invoke.cont unwind label %lpad37 38invoke.cont:39  unreachable40 41lpad:42  %eh = landingpad { ptr, i32 } cleanup43  call void @consume(i32 %v0)44  call void @destructor()45  resume { ptr, i32 } %eh46 47if.end:48  call void @consume(i32 %v1)49  call void @sideeffect()50  ret void51}52 53declare i1 @cond()54 55declare void @sideeffect()56 57declare void @simple_throw() noreturn58 59declare void @destructor()60 61declare void @consume(i32)62 63declare dso_local i32 @__gxx_personality_v0(...)64