224 lines · plain
1; RUN: llc < %s2 3define i32 @test1(i32 %x) nounwind uwtable ssp {4entry:5 %retval = alloca i32, align 46 %x.addr = alloca i32, align 47 store i32 %x, ptr %x.addr, align 48 %tmp = load i32, ptr %x.addr, align 49 %cmp = icmp sgt i32 %tmp, 110 %conv = zext i1 %cmp to i3211 %conv1 = sext i32 %conv to i6412 %expval = call i64 @llvm.expect.i64(i64 %conv1, i64 1)13 %tobool = icmp ne i64 %expval, 014 br i1 %tobool, label %if.then, label %if.end15 16if.then: ; preds = %entry17 %call = call i32 (...) @f()18 store i32 %call, ptr %retval19 br label %return20 21if.end: ; preds = %entry22 store i32 1, ptr %retval23 br label %return24 25return: ; preds = %if.end, %if.then26 %0 = load i32, ptr %retval27 ret i32 %028}29 30declare i64 @llvm.expect.i64(i64, i64) nounwind readnone31 32declare i32 @f(...)33 34define i32 @test2(i32 %x) nounwind uwtable ssp {35entry:36 %retval = alloca i32, align 437 %x.addr = alloca i32, align 438 store i32 %x, ptr %x.addr, align 439 %tmp = load i32, ptr %x.addr, align 440 %conv = sext i32 %tmp to i6441 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)42 %tobool = icmp ne i64 %expval, 043 br i1 %tobool, label %if.then, label %if.end44 45if.then: ; preds = %entry46 %call = call i32 (...) @f()47 store i32 %call, ptr %retval48 br label %return49 50if.end: ; preds = %entry51 store i32 1, ptr %retval52 br label %return53 54return: ; preds = %if.end, %if.then55 %0 = load i32, ptr %retval56 ret i32 %057}58 59define i32 @test3(i32 %x) nounwind uwtable ssp {60entry:61 %retval = alloca i32, align 462 %x.addr = alloca i32, align 463 store i32 %x, ptr %x.addr, align 464 %tmp = load i32, ptr %x.addr, align 465 %tobool = icmp ne i32 %tmp, 066 %lnot = xor i1 %tobool, true67 %lnot.ext = zext i1 %lnot to i3268 %conv = sext i32 %lnot.ext to i6469 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)70 %tobool1 = icmp ne i64 %expval, 071 br i1 %tobool1, label %if.then, label %if.end72 73if.then: ; preds = %entry74 %call = call i32 (...) @f()75 store i32 %call, ptr %retval76 br label %return77 78if.end: ; preds = %entry79 store i32 1, ptr %retval80 br label %return81 82return: ; preds = %if.end, %if.then83 %0 = load i32, ptr %retval84 ret i32 %085}86 87define i32 @test4(i32 %x) nounwind uwtable ssp {88entry:89 %retval = alloca i32, align 490 %x.addr = alloca i32, align 491 store i32 %x, ptr %x.addr, align 492 %tmp = load i32, ptr %x.addr, align 493 %tobool = icmp ne i32 %tmp, 094 %lnot = xor i1 %tobool, true95 %lnot1 = xor i1 %lnot, true96 %lnot.ext = zext i1 %lnot1 to i3297 %conv = sext i32 %lnot.ext to i6498 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)99 %tobool2 = icmp ne i64 %expval, 0100 br i1 %tobool2, label %if.then, label %if.end101 102if.then: ; preds = %entry103 %call = call i32 (...) @f()104 store i32 %call, ptr %retval105 br label %return106 107if.end: ; preds = %entry108 store i32 1, ptr %retval109 br label %return110 111return: ; preds = %if.end, %if.then112 %0 = load i32, ptr %retval113 ret i32 %0114}115 116define i32 @test5(i32 %x) nounwind uwtable ssp {117entry:118 %retval = alloca i32, align 4119 %x.addr = alloca i32, align 4120 store i32 %x, ptr %x.addr, align 4121 %tmp = load i32, ptr %x.addr, align 4122 %cmp = icmp slt i32 %tmp, 0123 %conv = zext i1 %cmp to i32124 %conv1 = sext i32 %conv to i64125 %expval = call i64 @llvm.expect.i64(i64 %conv1, i64 0)126 %tobool = icmp ne i64 %expval, 0127 br i1 %tobool, label %if.then, label %if.end128 129if.then: ; preds = %entry130 %call = call i32 (...) @f()131 store i32 %call, ptr %retval132 br label %return133 134if.end: ; preds = %entry135 store i32 1, ptr %retval136 br label %return137 138return: ; preds = %if.end, %if.then139 %0 = load i32, ptr %retval140 ret i32 %0141}142 143define i32 @test6(i32 %x) nounwind uwtable ssp {144entry:145 %retval = alloca i32, align 4146 %x.addr = alloca i32, align 4147 store i32 %x, ptr %x.addr, align 4148 %tmp = load i32, ptr %x.addr, align 4149 %conv = sext i32 %tmp to i64150 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)151 switch i64 %expval, label %sw.epilog [152 i64 1, label %sw.bb153 i64 2, label %sw.bb154 ]155 156sw.bb: ; preds = %entry, %entry157 store i32 0, ptr %retval158 br label %return159 160sw.epilog: ; preds = %entry161 store i32 1, ptr %retval162 br label %return163 164return: ; preds = %sw.epilog, %sw.bb165 %0 = load i32, ptr %retval166 ret i32 %0167}168 169define i32 @test7(i32 %x) nounwind uwtable ssp {170entry:171 %retval = alloca i32, align 4172 %x.addr = alloca i32, align 4173 store i32 %x, ptr %x.addr, align 4174 %tmp = load i32, ptr %x.addr, align 4175 %conv = sext i32 %tmp to i64176 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)177 switch i64 %expval, label %sw.epilog [178 i64 2, label %sw.bb179 i64 3, label %sw.bb180 ]181 182sw.bb: ; preds = %entry, %entry183 %tmp1 = load i32, ptr %x.addr, align 4184 store i32 %tmp1, ptr %retval185 br label %return186 187sw.epilog: ; preds = %entry188 store i32 0, ptr %retval189 br label %return190 191return: ; preds = %sw.epilog, %sw.bb192 %0 = load i32, ptr %retval193 ret i32 %0194}195 196define i32 @test8(i32 %x) nounwind uwtable ssp {197entry:198 %retval = alloca i32, align 4199 %x.addr = alloca i32, align 4200 store i32 %x, ptr %x.addr, align 4201 %tmp = load i32, ptr %x.addr, align 4202 %cmp = icmp sgt i32 %tmp, 1203 %conv = zext i1 %cmp to i32204 %expval = call i32 @llvm.expect.i32(i32 %conv, i32 1)205 %tobool = icmp ne i32 %expval, 0206 br i1 %tobool, label %if.then, label %if.end207 208if.then: ; preds = %entry209 %call = call i32 (...) @f()210 store i32 %call, ptr %retval211 br label %return212 213if.end: ; preds = %entry214 store i32 1, ptr %retval215 br label %return216 217return: ; preds = %if.end, %if.then218 %0 = load i32, ptr %retval219 ret i32 %0220}221 222declare i32 @llvm.expect.i32(i32, i32) nounwind readnone223 224