brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · ab2260a Raw
136 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -passes=ipsccp  --funcspec-min-function-size=1 -S < %s | FileCheck %s3 4define i32 @caller() {5; CHECK-LABEL: define i32 @caller() {6; CHECK-NEXT:  [[ENTRY:.*:]]7; CHECK-NEXT:    [[CALL1:%.*]] = call i32 @callee.specialized.1(i32 1)8; CHECK-NEXT:    [[CALL2:%.*]] = call i32 @callee.specialized.2(i32 0)9; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 undef, 010; CHECK-NEXT:    br i1 [[COND]], label %[[COMMON_RET:.*]], label %[[IF_THEN:.*]]11; CHECK:       [[COMMON_RET]]:12; CHECK-NEXT:    ret i32 013; CHECK:       [[IF_THEN]]:14; CHECK-NEXT:    ret i32 015;16entry:17  %call1 = call i32 @callee(i32 1)18  %call2 = call i32 @callee(i32 0)19  %cond = icmp eq i32 %call2, 020  br i1 %cond, label %common.ret, label %if.then21 22common.ret:                                       ; preds = %entry23  ret i32 024 25if.then:                                         ; preds = %entry26  %unreachable_call = call i32 @callee(i32 2)27  ret i32 %unreachable_call28}29 30define internal i32 @callee(i32 %arg) {31entry:32  br label %loop33 34loop:                                               ; preds = %ai, %entry35  %add = or i32 0, 036  %cond = icmp eq i32 %arg, 137  br i1 %cond, label %exit, label %loop38 39exit:                                               ; preds = %ai40  ret i32 041}42 43declare void @other_user(ptr)44 45define i32 @caller2() {46; CHECK-LABEL: define i32 @caller2() {47; CHECK-NEXT:  [[ENTRY:.*:]]48; CHECK-NEXT:    call void @other_user(ptr @callee2)49; CHECK-NEXT:    [[CALL1:%.*]] = call i32 @callee2.specialized.3(i32 1)50; CHECK-NEXT:    [[CALL2:%.*]] = call i32 @callee2.specialized.4(i32 0)51; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 undef, 052; CHECK-NEXT:    br i1 [[COND]], label %[[COMMON_RET:.*]], label %[[IF_THEN:.*]]53; CHECK:       [[COMMON_RET]]:54; CHECK-NEXT:    ret i32 055; CHECK:       [[IF_THEN]]:56; CHECK-NEXT:    [[UNREACHABLE_CALL:%.*]] = call i32 @callee2.specialized.7(i32 2)57; CHECK-NEXT:    ret i32 undef58;59entry:60  call void @other_user(ptr @callee2)61  %call1 = call i32 @callee2(i32 1)62  %call2 = call i32 @callee2(i32 0)63  %cond = icmp eq i32 %call2, 064  br i1 %cond, label %common.ret, label %if.then65 66common.ret:                                       ; preds = %entry67  ret i32 068 69if.then:                                         ; preds = %entry70  %unreachable_call = call i32 @callee2(i32 2)71  ret i32 %unreachable_call72}73 74define internal i32 @callee2(i32 %arg) {75; CHECK-LABEL: define internal i32 @callee2(76; CHECK-SAME: i32 [[ARG:%.*]]) {77; CHECK-NEXT:  [[ENTRY:.*:]]78; CHECK-NEXT:    br label %[[LOOP:.*]]79; CHECK:       [[LOOP]]:80; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[ARG]], 181; CHECK-NEXT:    br i1 [[COND]], label %[[EXIT:.*]], label %[[LOOP]]82; CHECK:       [[EXIT]]:83; CHECK-NEXT:    ret i32 084;85entry:86  br label %loop87 88loop:                                               ; preds = %ai, %entry89  %add = or i32 0, 090  %cond = icmp eq i32 %arg, 191  br i1 %cond, label %exit, label %loop92 93exit:                                               ; preds = %ai94  ret i32 095}96 97define i32 @caller3(i32 %arg) {98; CHECK-LABEL: define range(i32 2, 1) i32 @caller3(99; CHECK-SAME: i32 [[ARG:%.*]]) {100; CHECK-NEXT:  [[ENTRY:.*:]]101; CHECK-NEXT:    [[CALL1:%.*]] = call i32 @callee3.specialized.5(i32 0)102; CHECK-NEXT:    [[CALL2:%.*]] = call i32 @callee3.specialized.6(i32 1)103; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 undef, 0104; CHECK-NEXT:    br i1 [[COND]], label %[[COMMON_RET:.*]], label %[[IF_THEN:.*]]105; CHECK:       [[COMMON_RET]]:106; CHECK-NEXT:    ret i32 0107; CHECK:       [[IF_THEN]]:108; CHECK-NEXT:    ret i32 poison109;110entry:111  %call1 = call i32 @callee3(i32 0)112  %call2 = call i32 @callee3(i32 1)113  %cond = icmp eq i32 %call2, 0114  br i1 %cond, label %common.ret, label %if.then115 116common.ret:                                       ; preds = %entry117  ret i32 0118 119if.then:                                         ; preds = %entry120  %unreachable_call = call i32 @callee3(i32 %arg)121  ret i32 %unreachable_call122}123 124define internal i32 @callee3(i32 %arg) {125entry:126  br label %loop127 128loop:                                               ; preds = %ai, %entry129  %add = or i32 0, 0130  %cond = icmp ne i32 %arg, 1131  br i1 %cond, label %exit, label %loop132 133exit:                                               ; preds = %ai134  ret i32 %arg135}136