1*394e321aSYingwei Zheng; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 2*394e321aSYingwei Zheng; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s 3*394e321aSYingwei Zheng 4*394e321aSYingwei Zhengdefine i32 @test_unreachable_default(i32 noundef %num) { 5*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_unreachable_default( 6*394e321aSYingwei Zheng; CHECK-SAME: i32 noundef [[NUM:%.*]]) { 7*394e321aSYingwei Zheng; CHECK-NEXT: entry: 8*394e321aSYingwei Zheng; CHECK-NEXT: [[SUB:%.*]] = add i32 [[NUM]], -120 9*394e321aSYingwei Zheng; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SUB]], 3 10*394e321aSYingwei Zheng; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 2 11*394e321aSYingwei Zheng; CHECK-NEXT: switch i32 [[COND]], label [[DEFAULT_UNREACHABLE:%.*]] [ 12*394e321aSYingwei Zheng; CHECK-NEXT: i32 0, label [[SW_BB:%.*]] 13*394e321aSYingwei Zheng; CHECK-NEXT: i32 1, label [[SW_BB2:%.*]] 14*394e321aSYingwei Zheng; CHECK-NEXT: i32 2, label [[SW_BB4:%.*]] 15*394e321aSYingwei Zheng; CHECK-NEXT: ] 16*394e321aSYingwei Zheng; CHECK: sw.bb: 17*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL:%.*]] = call i32 @call0() 18*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP:%.*]] 19*394e321aSYingwei Zheng; CHECK: sw.bb2: 20*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL3:%.*]] = call i32 @call1() 21*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 22*394e321aSYingwei Zheng; CHECK: sw.bb4: 23*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL5:%.*]] = call i32 @call2() 24*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 25*394e321aSYingwei Zheng; CHECK: default.unreachable: 26*394e321aSYingwei Zheng; CHECK-NEXT: unreachable 27*394e321aSYingwei Zheng; CHECK: sw.default: 28*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL6:%.*]] = call i32 @call3() 29*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 30*394e321aSYingwei Zheng; CHECK: cleanup: 31*394e321aSYingwei Zheng; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL6]], [[SW_DEFAULT:%.*]] ], [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ] 32*394e321aSYingwei Zheng; CHECK-NEXT: ret i32 [[RETVAL_0]] 33*394e321aSYingwei Zheng; 34*394e321aSYingwei Zhengentry: 35*394e321aSYingwei Zheng %sub = add i32 %num, -120 36*394e321aSYingwei Zheng %cmp = icmp ult i32 %sub, 3 37*394e321aSYingwei Zheng %cond = select i1 %cmp, i32 %sub, i32 2 38*394e321aSYingwei Zheng switch i32 %cond, label %sw.default [ 39*394e321aSYingwei Zheng i32 0, label %sw.bb 40*394e321aSYingwei Zheng i32 1, label %sw.bb2 41*394e321aSYingwei Zheng i32 2, label %sw.bb4 42*394e321aSYingwei Zheng ] 43*394e321aSYingwei Zheng 44*394e321aSYingwei Zhengsw.bb: 45*394e321aSYingwei Zheng %call = call i32 @call0() 46*394e321aSYingwei Zheng br label %cleanup 47*394e321aSYingwei Zheng 48*394e321aSYingwei Zhengsw.bb2: 49*394e321aSYingwei Zheng %call3 = call i32 @call1() 50*394e321aSYingwei Zheng br label %cleanup 51*394e321aSYingwei Zheng 52*394e321aSYingwei Zhengsw.bb4: 53*394e321aSYingwei Zheng %call5 = call i32 @call2() 54*394e321aSYingwei Zheng br label %cleanup 55*394e321aSYingwei Zheng 56*394e321aSYingwei Zhengsw.default: 57*394e321aSYingwei Zheng %call6 = call i32 @call3() 58*394e321aSYingwei Zheng br label %cleanup 59*394e321aSYingwei Zheng 60*394e321aSYingwei Zhengcleanup: 61*394e321aSYingwei Zheng %retval.0 = phi i32 [ %call6, %sw.default ], [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ] 62*394e321aSYingwei Zheng ret i32 %retval.0 63*394e321aSYingwei Zheng} 64*394e321aSYingwei Zheng 65*394e321aSYingwei Zhengdefine i32 @test_unreachable_default_shared_edge(i32 noundef %num) { 66*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_unreachable_default_shared_edge( 67*394e321aSYingwei Zheng; CHECK-SAME: i32 noundef [[NUM:%.*]]) { 68*394e321aSYingwei Zheng; CHECK-NEXT: entry: 69*394e321aSYingwei Zheng; CHECK-NEXT: [[SUB:%.*]] = add i32 [[NUM]], -120 70*394e321aSYingwei Zheng; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SUB]], 3 71*394e321aSYingwei Zheng; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 2 72*394e321aSYingwei Zheng; CHECK-NEXT: switch i32 [[COND]], label [[DEFAULT_UNREACHABLE:%.*]] [ 73*394e321aSYingwei Zheng; CHECK-NEXT: i32 0, label [[SW_BB:%.*]] 74*394e321aSYingwei Zheng; CHECK-NEXT: i32 1, label [[SW_BB2:%.*]] 75*394e321aSYingwei Zheng; CHECK-NEXT: i32 2, label [[SW_BB4:%.*]] 76*394e321aSYingwei Zheng; CHECK-NEXT: ] 77*394e321aSYingwei Zheng; CHECK: sw.bb: 78*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL:%.*]] = call i32 @call0() 79*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP:%.*]] 80*394e321aSYingwei Zheng; CHECK: sw.bb2: 81*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL3:%.*]] = call i32 @call1() 82*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 83*394e321aSYingwei Zheng; CHECK: default.unreachable: 84*394e321aSYingwei Zheng; CHECK-NEXT: unreachable 85*394e321aSYingwei Zheng; CHECK: sw.bb4: 86*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL5:%.*]] = call i32 @call4(i32 [[SUB]]) 87*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 88*394e321aSYingwei Zheng; CHECK: cleanup: 89*394e321aSYingwei Zheng; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ] 90*394e321aSYingwei Zheng; CHECK-NEXT: ret i32 [[RETVAL_0]] 91*394e321aSYingwei Zheng; 92*394e321aSYingwei Zhengentry: 93*394e321aSYingwei Zheng %sub = add i32 %num, -120 94*394e321aSYingwei Zheng %cmp = icmp ult i32 %sub, 3 95*394e321aSYingwei Zheng %cond = select i1 %cmp, i32 %sub, i32 2 96*394e321aSYingwei Zheng switch i32 %cond, label %sw.bb4 [ 97*394e321aSYingwei Zheng i32 0, label %sw.bb 98*394e321aSYingwei Zheng i32 1, label %sw.bb2 99*394e321aSYingwei Zheng i32 2, label %sw.bb4 100*394e321aSYingwei Zheng ] 101*394e321aSYingwei Zheng 102*394e321aSYingwei Zhengsw.bb: 103*394e321aSYingwei Zheng %call = call i32 @call0() 104*394e321aSYingwei Zheng br label %cleanup 105*394e321aSYingwei Zheng 106*394e321aSYingwei Zhengsw.bb2: 107*394e321aSYingwei Zheng %call3 = call i32 @call1() 108*394e321aSYingwei Zheng br label %cleanup 109*394e321aSYingwei Zheng 110*394e321aSYingwei Zhengsw.bb4: 111*394e321aSYingwei Zheng %val = phi i32 [ %sub, %entry ], [ %sub, %entry ] 112*394e321aSYingwei Zheng %call5 = call i32 @call4(i32 %val) 113*394e321aSYingwei Zheng br label %cleanup 114*394e321aSYingwei Zheng 115*394e321aSYingwei Zhengcleanup: 116*394e321aSYingwei Zheng %retval.0 = phi i32 [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ] 117*394e321aSYingwei Zheng ret i32 %retval.0 118*394e321aSYingwei Zheng} 119*394e321aSYingwei Zheng 120*394e321aSYingwei Zheng; Negative tests 121*394e321aSYingwei Zheng 122*394e321aSYingwei Zhengdefine i32 @test_reachable_default(i32 noundef %num) { 123*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_reachable_default( 124*394e321aSYingwei Zheng; CHECK-SAME: i32 noundef [[NUM:%.*]]) { 125*394e321aSYingwei Zheng; CHECK-NEXT: entry: 126*394e321aSYingwei Zheng; CHECK-NEXT: [[SUB:%.*]] = add i32 [[NUM]], -120 127*394e321aSYingwei Zheng; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SUB]], 3 128*394e321aSYingwei Zheng; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 4 129*394e321aSYingwei Zheng; CHECK-NEXT: switch i32 [[COND]], label [[SW_DEFAULT:%.*]] [ 130*394e321aSYingwei Zheng; CHECK-NEXT: i32 0, label [[SW_BB:%.*]] 131*394e321aSYingwei Zheng; CHECK-NEXT: i32 1, label [[SW_BB2:%.*]] 132*394e321aSYingwei Zheng; CHECK-NEXT: i32 2, label [[SW_BB4:%.*]] 133*394e321aSYingwei Zheng; CHECK-NEXT: ] 134*394e321aSYingwei Zheng; CHECK: sw.bb: 135*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL:%.*]] = call i32 @call0() 136*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP:%.*]] 137*394e321aSYingwei Zheng; CHECK: sw.bb2: 138*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL3:%.*]] = call i32 @call1() 139*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 140*394e321aSYingwei Zheng; CHECK: sw.bb4: 141*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL5:%.*]] = call i32 @call2() 142*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 143*394e321aSYingwei Zheng; CHECK: sw.default: 144*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL6:%.*]] = call i32 @call3() 145*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 146*394e321aSYingwei Zheng; CHECK: cleanup: 147*394e321aSYingwei Zheng; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL6]], [[SW_DEFAULT]] ], [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ] 148*394e321aSYingwei Zheng; CHECK-NEXT: ret i32 [[RETVAL_0]] 149*394e321aSYingwei Zheng; 150*394e321aSYingwei Zhengentry: 151*394e321aSYingwei Zheng %sub = add i32 %num, -120 152*394e321aSYingwei Zheng %cmp = icmp ult i32 %sub, 3 153*394e321aSYingwei Zheng %cond = select i1 %cmp, i32 %sub, i32 4 154*394e321aSYingwei Zheng switch i32 %cond, label %sw.default [ 155*394e321aSYingwei Zheng i32 0, label %sw.bb 156*394e321aSYingwei Zheng i32 1, label %sw.bb2 157*394e321aSYingwei Zheng i32 2, label %sw.bb4 158*394e321aSYingwei Zheng ] 159*394e321aSYingwei Zheng 160*394e321aSYingwei Zhengsw.bb: 161*394e321aSYingwei Zheng %call = call i32 @call0() 162*394e321aSYingwei Zheng br label %cleanup 163*394e321aSYingwei Zheng 164*394e321aSYingwei Zhengsw.bb2: 165*394e321aSYingwei Zheng %call3 = call i32 @call1() 166*394e321aSYingwei Zheng br label %cleanup 167*394e321aSYingwei Zheng 168*394e321aSYingwei Zhengsw.bb4: 169*394e321aSYingwei Zheng %call5 = call i32 @call2() 170*394e321aSYingwei Zheng br label %cleanup 171*394e321aSYingwei Zheng 172*394e321aSYingwei Zhengsw.default: 173*394e321aSYingwei Zheng %call6 = call i32 @call3() 174*394e321aSYingwei Zheng br label %cleanup 175*394e321aSYingwei Zheng 176*394e321aSYingwei Zhengcleanup: 177*394e321aSYingwei Zheng %retval.0 = phi i32 [ %call6, %sw.default ], [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ] 178*394e321aSYingwei Zheng ret i32 %retval.0 179*394e321aSYingwei Zheng} 180*394e321aSYingwei Zheng 181*394e321aSYingwei Zhengdefine i32 @test_unreachable_default_cond_may_be_undef(i32 %num) { 182*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_unreachable_default_cond_may_be_undef( 183*394e321aSYingwei Zheng; CHECK-SAME: i32 [[NUM:%.*]]) { 184*394e321aSYingwei Zheng; CHECK-NEXT: entry: 185*394e321aSYingwei Zheng; CHECK-NEXT: [[SUB:%.*]] = add i32 [[NUM]], -120 186*394e321aSYingwei Zheng; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SUB]], 3 187*394e321aSYingwei Zheng; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 2 188*394e321aSYingwei Zheng; CHECK-NEXT: switch i32 [[COND]], label [[SW_DEFAULT:%.*]] [ 189*394e321aSYingwei Zheng; CHECK-NEXT: i32 0, label [[SW_BB:%.*]] 190*394e321aSYingwei Zheng; CHECK-NEXT: i32 1, label [[SW_BB2:%.*]] 191*394e321aSYingwei Zheng; CHECK-NEXT: i32 2, label [[SW_BB4:%.*]] 192*394e321aSYingwei Zheng; CHECK-NEXT: ] 193*394e321aSYingwei Zheng; CHECK: sw.bb: 194*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL:%.*]] = call i32 @call0() 195*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP:%.*]] 196*394e321aSYingwei Zheng; CHECK: sw.bb2: 197*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL3:%.*]] = call i32 @call1() 198*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 199*394e321aSYingwei Zheng; CHECK: sw.bb4: 200*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL5:%.*]] = call i32 @call2() 201*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 202*394e321aSYingwei Zheng; CHECK: sw.default: 203*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL6:%.*]] = call i32 @call3() 204*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 205*394e321aSYingwei Zheng; CHECK: cleanup: 206*394e321aSYingwei Zheng; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL6]], [[SW_DEFAULT]] ], [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ] 207*394e321aSYingwei Zheng; CHECK-NEXT: ret i32 [[RETVAL_0]] 208*394e321aSYingwei Zheng; 209*394e321aSYingwei Zhengentry: 210*394e321aSYingwei Zheng %sub = add i32 %num, -120 211*394e321aSYingwei Zheng %cmp = icmp ult i32 %sub, 3 212*394e321aSYingwei Zheng %cond = select i1 %cmp, i32 %sub, i32 2 213*394e321aSYingwei Zheng switch i32 %cond, label %sw.default [ 214*394e321aSYingwei Zheng i32 0, label %sw.bb 215*394e321aSYingwei Zheng i32 1, label %sw.bb2 216*394e321aSYingwei Zheng i32 2, label %sw.bb4 217*394e321aSYingwei Zheng ] 218*394e321aSYingwei Zheng 219*394e321aSYingwei Zhengsw.bb: 220*394e321aSYingwei Zheng %call = call i32 @call0() 221*394e321aSYingwei Zheng br label %cleanup 222*394e321aSYingwei Zheng 223*394e321aSYingwei Zhengsw.bb2: 224*394e321aSYingwei Zheng %call3 = call i32 @call1() 225*394e321aSYingwei Zheng br label %cleanup 226*394e321aSYingwei Zheng 227*394e321aSYingwei Zhengsw.bb4: 228*394e321aSYingwei Zheng %call5 = call i32 @call2() 229*394e321aSYingwei Zheng br label %cleanup 230*394e321aSYingwei Zheng 231*394e321aSYingwei Zhengsw.default: 232*394e321aSYingwei Zheng %call6 = call i32 @call3() 233*394e321aSYingwei Zheng br label %cleanup 234*394e321aSYingwei Zheng 235*394e321aSYingwei Zhengcleanup: 236*394e321aSYingwei Zheng %retval.0 = phi i32 [ %call6, %sw.default ], [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ] 237*394e321aSYingwei Zheng ret i32 %retval.0 238*394e321aSYingwei Zheng} 239*394e321aSYingwei Zheng 240*394e321aSYingwei Zhengdefine i32 @test_default_is_already_unreachable(i32 %num) { 241*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_default_is_already_unreachable( 242*394e321aSYingwei Zheng; CHECK-SAME: i32 [[NUM:%.*]]) { 243*394e321aSYingwei Zheng; CHECK-NEXT: entry: 244*394e321aSYingwei Zheng; CHECK-NEXT: [[SUB:%.*]] = add i32 [[NUM]], -120 245*394e321aSYingwei Zheng; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[SUB]], 3 246*394e321aSYingwei Zheng; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 2 247*394e321aSYingwei Zheng; CHECK-NEXT: switch i32 [[COND]], label [[SW_DEFAULT:%.*]] [ 248*394e321aSYingwei Zheng; CHECK-NEXT: i32 0, label [[SW_BB:%.*]] 249*394e321aSYingwei Zheng; CHECK-NEXT: i32 1, label [[SW_BB2:%.*]] 250*394e321aSYingwei Zheng; CHECK-NEXT: i32 2, label [[SW_BB4:%.*]] 251*394e321aSYingwei Zheng; CHECK-NEXT: ] 252*394e321aSYingwei Zheng; CHECK: sw.bb: 253*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL:%.*]] = call i32 @call0() 254*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP:%.*]] 255*394e321aSYingwei Zheng; CHECK: sw.bb2: 256*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL3:%.*]] = call i32 @call1() 257*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 258*394e321aSYingwei Zheng; CHECK: sw.bb4: 259*394e321aSYingwei Zheng; CHECK-NEXT: [[CALL5:%.*]] = call i32 @call2() 260*394e321aSYingwei Zheng; CHECK-NEXT: br label [[CLEANUP]] 261*394e321aSYingwei Zheng; CHECK: sw.default: 262*394e321aSYingwei Zheng; CHECK-NEXT: unreachable 263*394e321aSYingwei Zheng; CHECK: cleanup: 264*394e321aSYingwei Zheng; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ] 265*394e321aSYingwei Zheng; CHECK-NEXT: ret i32 [[RETVAL_0]] 266*394e321aSYingwei Zheng; 267*394e321aSYingwei Zhengentry: 268*394e321aSYingwei Zheng %sub = add i32 %num, -120 269*394e321aSYingwei Zheng %cmp = icmp ult i32 %sub, 3 270*394e321aSYingwei Zheng %cond = select i1 %cmp, i32 %sub, i32 2 271*394e321aSYingwei Zheng switch i32 %cond, label %sw.default [ 272*394e321aSYingwei Zheng i32 0, label %sw.bb 273*394e321aSYingwei Zheng i32 1, label %sw.bb2 274*394e321aSYingwei Zheng i32 2, label %sw.bb4 275*394e321aSYingwei Zheng ] 276*394e321aSYingwei Zheng 277*394e321aSYingwei Zhengsw.bb: 278*394e321aSYingwei Zheng %call = call i32 @call0() 279*394e321aSYingwei Zheng br label %cleanup 280*394e321aSYingwei Zheng 281*394e321aSYingwei Zhengsw.bb2: 282*394e321aSYingwei Zheng %call3 = call i32 @call1() 283*394e321aSYingwei Zheng br label %cleanup 284*394e321aSYingwei Zheng 285*394e321aSYingwei Zhengsw.bb4: 286*394e321aSYingwei Zheng %call5 = call i32 @call2() 287*394e321aSYingwei Zheng br label %cleanup 288*394e321aSYingwei Zheng 289*394e321aSYingwei Zhengsw.default: 290*394e321aSYingwei Zheng unreachable 291*394e321aSYingwei Zheng 292*394e321aSYingwei Zhengcleanup: 293*394e321aSYingwei Zheng %retval.0 = phi i32 [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ] 294*394e321aSYingwei Zheng ret i32 %retval.0 295*394e321aSYingwei Zheng} 296*394e321aSYingwei Zheng 297*394e321aSYingwei Zhengdeclare i32 @call0() 298*394e321aSYingwei Zhengdeclare i32 @call1() 299*394e321aSYingwei Zhengdeclare i32 @call2() 300*394e321aSYingwei Zhengdeclare i32 @call3() 301*394e321aSYingwei Zhengdeclare i32 @call4(i32) 302