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