403 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 62// RUN: %clang_cc1 -O1 -disable-llvm-passes -emit-llvm %s -o - -triple=x86_64-- | FileCheck %s3 4extern volatile bool b;5extern volatile int i;6extern bool A();7extern bool B();8 9// CHECK-LABEL: define dso_local noundef zeroext i1 @_Z1fv(10// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {11// CHECK-NEXT: [[ENTRY:.*:]]12// CHECK-NEXT: [[RETVAL:%.*]] = alloca i1, align 113// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6:![0-9]+]], !range [[RNG8:![0-9]+]], !noundef [[META9:![0-9]+]]14// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i115// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 true)16// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]17// CHECK: [[IF_THEN]]:18// CHECK-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @_Z1Av()19// CHECK-NEXT: store i1 [[CALL]], ptr [[RETVAL]], align 120// CHECK-NEXT: br label %[[RETURN:.*]]21// CHECK: [[IF_END]]:22// CHECK-NEXT: [[CALL1:%.*]] = call noundef zeroext i1 @_Z1Bv()23// CHECK-NEXT: store i1 [[CALL1]], ptr [[RETVAL]], align 124// CHECK-NEXT: br label %[[RETURN]]25// CHECK: [[RETURN]]:26// CHECK-NEXT: [[TMP1:%.*]] = load i1, ptr [[RETVAL]], align 127// CHECK-NEXT: ret i1 [[TMP1]]28//29bool f() {30 if (b)31 [[likely]] {32 return A();33 }34 return B();35}36 37// CHECK-LABEL: define dso_local noundef zeroext i1 @_Z1gv(38// CHECK-SAME: ) #[[ATTR0]] {39// CHECK-NEXT: [[ENTRY:.*:]]40// CHECK-NEXT: [[RETVAL:%.*]] = alloca i1, align 141// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]42// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i143// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)44// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]45// CHECK: [[IF_THEN]]:46// CHECK-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @_Z1Av()47// CHECK-NEXT: store i1 [[CALL]], ptr [[RETVAL]], align 148// CHECK-NEXT: br label %[[RETURN:.*]]49// CHECK: [[IF_END]]:50// CHECK-NEXT: [[CALL1:%.*]] = call noundef zeroext i1 @_Z1Bv()51// CHECK-NEXT: store i1 [[CALL1]], ptr [[RETVAL]], align 152// CHECK-NEXT: br label %[[RETURN]]53// CHECK: [[RETURN]]:54// CHECK-NEXT: [[TMP1:%.*]] = load i1, ptr [[RETVAL]], align 155// CHECK-NEXT: ret i1 [[TMP1]]56//57bool g() {58 if (b)59 [[unlikely]] {60 return A();61 }62 63 return B();64}65 66// CHECK-LABEL: define dso_local noundef zeroext i1 @_Z1hv(67// CHECK-SAME: ) #[[ATTR0]] {68// CHECK-NEXT: [[ENTRY:.*:]]69// CHECK-NEXT: [[RETVAL:%.*]] = alloca i1, align 170// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]71// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i172// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)73// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]74// CHECK: [[IF_THEN]]:75// CHECK-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @_Z1Av()76// CHECK-NEXT: store i1 [[CALL]], ptr [[RETVAL]], align 177// CHECK-NEXT: br label %[[RETURN:.*]]78// CHECK: [[IF_END]]:79// CHECK-NEXT: [[CALL1:%.*]] = call noundef zeroext i1 @_Z1Bv()80// CHECK-NEXT: store i1 [[CALL1]], ptr [[RETVAL]], align 181// CHECK-NEXT: br label %[[RETURN]]82// CHECK: [[RETURN]]:83// CHECK-NEXT: [[TMP1:%.*]] = load i1, ptr [[RETVAL]], align 184// CHECK-NEXT: ret i1 [[TMP1]]85//86bool h() {87 if (b)88 [[unlikely]] return A();89 90 return B();91}92 93// CHECK-LABEL: define dso_local void @_Z8NullStmtv(94// CHECK-SAME: ) #[[ATTR0]] {95// CHECK-NEXT: [[ENTRY:.*:]]96// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]97// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i198// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)99// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]100// CHECK: [[IF_THEN]]:101// CHECK-NEXT: br label %[[IF_END:.*]]102// CHECK: [[IF_ELSE]]:103// CHECK-NEXT: store volatile i8 1, ptr @b, align 1, !tbaa [[BOOL_TBAA6]]104// CHECK-NEXT: br label %[[IF_END]]105// CHECK: [[IF_END]]:106// CHECK-NEXT: ret void107//108void NullStmt() {109 if (b)110 [[unlikely]];111 else {112 // Make sure the branches aren't optimized away.113 b = true;114 }115}116 117// CHECK-LABEL: define dso_local void @_Z6IfStmtv(118// CHECK-SAME: ) #[[ATTR0]] {119// CHECK-NEXT: [[ENTRY:.*:]]120// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]121// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i1122// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)123// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_END2:.*]]124// CHECK: [[IF_THEN]]:125// CHECK-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @_Z1Bv()126// CHECK-NEXT: br i1 [[CALL]], label %[[IF_THEN1:.*]], label %[[IF_END:.*]]127// CHECK: [[IF_THEN1]]:128// CHECK-NEXT: br label %[[IF_END]]129// CHECK: [[IF_END]]:130// CHECK-NEXT: br label %[[IF_END2]]131// CHECK: [[IF_END2]]:132// CHECK-NEXT: [[TMP1:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]133// CHECK-NEXT: [[LOADEDV3:%.*]] = trunc i8 [[TMP1]] to i1134// CHECK-NEXT: br i1 [[LOADEDV3]], label %[[IF_THEN4:.*]], label %[[IF_END8:.*]]135// CHECK: [[IF_THEN4]]:136// CHECK-NEXT: [[CALL5:%.*]] = call noundef zeroext i1 @_Z1Bv()137// CHECK-NEXT: [[CALL5_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[CALL5]], i1 false)138// CHECK-NEXT: br i1 [[CALL5_EXPVAL]], label %[[IF_THEN6:.*]], label %[[IF_END7:.*]]139// CHECK: [[IF_THEN6]]:140// CHECK-NEXT: store volatile i8 0, ptr @b, align 1, !tbaa [[BOOL_TBAA6]]141// CHECK-NEXT: br label %[[IF_END7]]142// CHECK: [[IF_END7]]:143// CHECK-NEXT: br label %[[IF_END8]]144// CHECK: [[IF_END8]]:145// CHECK-NEXT: ret void146//147void IfStmt() {148 if (b)149 [[unlikely]] if (B()) {}150 151 if (b) {152 if (B())153 [[unlikely]] { b = false; }154 }155}156 157// CHECK-LABEL: define dso_local void @_Z9WhileStmtv(158// CHECK-SAME: ) #[[ATTR0]] {159// CHECK-NEXT: [[ENTRY:.*:]]160// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]161// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i1162// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)163// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]164// CHECK: [[IF_THEN]]:165// CHECK-NEXT: br label %[[WHILE_COND:.*]]166// CHECK: [[WHILE_COND]]:167// CHECK-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @_Z1Bv()168// CHECK-NEXT: br i1 [[CALL]], label %[[WHILE_BODY:.*]], label %[[WHILE_END:.*]]169// CHECK: [[WHILE_BODY]]:170// CHECK-NEXT: br label %[[WHILE_COND]], !llvm.loop [[LOOP10:![0-9]+]]171// CHECK: [[WHILE_END]]:172// CHECK-NEXT: br label %[[IF_END]]173// CHECK: [[IF_END]]:174// CHECK-NEXT: [[TMP1:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]175// CHECK-NEXT: [[LOADEDV1:%.*]] = trunc i8 [[TMP1]] to i1176// CHECK-NEXT: br i1 [[LOADEDV1]], label %[[IF_THEN2:.*]], label %[[IF_END7:.*]]177// CHECK: [[IF_THEN2]]:178// CHECK-NEXT: br label %[[WHILE_COND3:.*]]179// CHECK: [[WHILE_COND3]]:180// CHECK-NEXT: [[CALL4:%.*]] = call noundef zeroext i1 @_Z1Bv()181// CHECK-NEXT: [[CALL4_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[CALL4]], i1 false)182// CHECK-NEXT: br i1 [[CALL4_EXPVAL]], label %[[WHILE_BODY5:.*]], label %[[WHILE_END6:.*]]183// CHECK: [[WHILE_BODY5]]:184// CHECK-NEXT: store volatile i8 0, ptr @b, align 1, !tbaa [[BOOL_TBAA6]]185// CHECK-NEXT: br label %[[WHILE_COND3]], !llvm.loop [[LOOP13:![0-9]+]]186// CHECK: [[WHILE_END6]]:187// CHECK-NEXT: br label %[[IF_END7]]188// CHECK: [[IF_END7]]:189// CHECK-NEXT: ret void190//191void WhileStmt() {192 if (b)193 [[unlikely]] while (B()) {}194 195 if (b)196 while (B())197 [[unlikely]] { b = false; }198}199 200// CHECK-LABEL: define dso_local void @_Z6DoStmtv(201// CHECK-SAME: ) #[[ATTR0]] {202// CHECK-NEXT: [[ENTRY:.*:]]203// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]204// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i1205// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)206// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]207// CHECK: [[IF_THEN]]:208// CHECK-NEXT: br label %[[DO_BODY:.*]]209// CHECK: [[DO_BODY]]:210// CHECK-NEXT: br label %[[DO_COND:.*]]211// CHECK: [[DO_COND]]:212// CHECK-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @_Z1Bv()213// CHECK-NEXT: br i1 [[CALL]], label %[[DO_BODY]], label %[[DO_END:.*]], !llvm.loop [[LOOP14:![0-9]+]]214// CHECK: [[DO_END]]:215// CHECK-NEXT: br label %[[IF_END]]216// CHECK: [[IF_END]]:217// CHECK-NEXT: [[TMP1:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]218// CHECK-NEXT: [[LOADEDV1:%.*]] = trunc i8 [[TMP1]] to i1219// CHECK-NEXT: br i1 [[LOADEDV1]], label %[[IF_THEN2:.*]], label %[[IF_END7:.*]]220// CHECK: [[IF_THEN2]]:221// CHECK-NEXT: br label %[[DO_BODY3:.*]]222// CHECK: [[DO_BODY3]]:223// CHECK-NEXT: br label %[[DO_COND4:.*]]224// CHECK: [[DO_COND4]]:225// CHECK-NEXT: [[CALL5:%.*]] = call noundef zeroext i1 @_Z1Bv()226// CHECK-NEXT: br i1 [[CALL5]], label %[[DO_BODY3]], label %[[DO_END6:.*]], !llvm.loop [[LOOP15:![0-9]+]]227// CHECK: [[DO_END6]]:228// CHECK-NEXT: br label %[[IF_END7]]229// CHECK: [[IF_END7]]:230// CHECK-NEXT: ret void231//232void DoStmt() {233 if (b)234 [[unlikely]] do {}235 while (B())236 ;237 238 if (b)239 do240 [[unlikely]] {}241 while (B());242}243 244// CHECK-LABEL: define dso_local void @_Z7ForStmtv(245// CHECK-SAME: ) #[[ATTR0]] {246// CHECK-NEXT: [[ENTRY:.*:]]247// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]248// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i1249// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)250// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]251// CHECK: [[IF_THEN]]:252// CHECK-NEXT: br label %[[FOR_COND:.*]]253// CHECK: [[FOR_COND]]:254// CHECK-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @_Z1Bv()255// CHECK-NEXT: br i1 [[CALL]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]256// CHECK: [[FOR_BODY]]:257// CHECK-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP16:![0-9]+]]258// CHECK: [[FOR_END]]:259// CHECK-NEXT: br label %[[IF_END]]260// CHECK: [[IF_END]]:261// CHECK-NEXT: [[TMP1:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]262// CHECK-NEXT: [[LOADEDV1:%.*]] = trunc i8 [[TMP1]] to i1263// CHECK-NEXT: br i1 [[LOADEDV1]], label %[[IF_THEN2:.*]], label %[[IF_END7:.*]]264// CHECK: [[IF_THEN2]]:265// CHECK-NEXT: br label %[[FOR_COND3:.*]]266// CHECK: [[FOR_COND3]]:267// CHECK-NEXT: [[CALL4:%.*]] = call noundef zeroext i1 @_Z1Bv()268// CHECK-NEXT: [[CALL4_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[CALL4]], i1 false)269// CHECK-NEXT: br i1 [[CALL4_EXPVAL]], label %[[FOR_BODY5:.*]], label %[[FOR_END6:.*]]270// CHECK: [[FOR_BODY5]]:271// CHECK-NEXT: br label %[[FOR_COND3]], !llvm.loop [[LOOP17:![0-9]+]]272// CHECK: [[FOR_END6]]:273// CHECK-NEXT: br label %[[IF_END7]]274// CHECK: [[IF_END7]]:275// CHECK-NEXT: ret void276//277void ForStmt() {278 if (b)279 [[unlikely]] for (; B();) {}280 281 if (b)282 for (; B();)283 [[unlikely]] {}284}285 286// CHECK-LABEL: define dso_local void @_Z8GotoStmtv(287// CHECK-SAME: ) #[[ATTR0]] {288// CHECK-NEXT: [[ENTRY:.*:]]289// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]290// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i1291// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)292// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]293// CHECK: [[IF_THEN]]:294// CHECK-NEXT: br label %[[END:.*]]295// CHECK: [[IF_ELSE]]:296// CHECK-NEXT: store volatile i8 1, ptr @b, align 1, !tbaa [[BOOL_TBAA6]]297// CHECK-NEXT: br label %[[IF_END:.*]]298// CHECK: [[IF_END]]:299// CHECK-NEXT: br label %[[END]]300// CHECK: [[END]]:301// CHECK-NEXT: ret void302//303void GotoStmt() {304 if (b)305 [[unlikely]] goto end;306 else {307 // Make sure the branches aren't optimized away.308 b = true;309 }310end:;311}312 313// CHECK-LABEL: define dso_local void @_Z10ReturnStmtv(314// CHECK-SAME: ) #[[ATTR0]] {315// CHECK-NEXT: [[ENTRY:.*:]]316// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]317// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i1318// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)319// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]320// CHECK: [[IF_THEN]]:321// CHECK-NEXT: br label %[[IF_END:.*]]322// CHECK: [[IF_ELSE]]:323// CHECK-NEXT: store volatile i8 1, ptr @b, align 1, !tbaa [[BOOL_TBAA6]]324// CHECK-NEXT: br label %[[IF_END]]325// CHECK: [[IF_END]]:326// CHECK-NEXT: ret void327//328void ReturnStmt() {329 if (b)330 [[unlikely]] return;331 else {332 // Make sure the branches aren't optimized away.333 b = true;334 }335}336 337// CHECK-LABEL: define dso_local void @_Z10SwitchStmtv(338// CHECK-SAME: ) #[[ATTR0]] {339// CHECK-NEXT: [[ENTRY:.*:]]340// CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]341// CHECK-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i1342// CHECK-NEXT: [[LOADEDV_EXPVAL:%.*]] = call i1 @llvm.expect.i1(i1 [[LOADEDV]], i1 false)343// CHECK-NEXT: br i1 [[LOADEDV_EXPVAL]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]344// CHECK: [[IF_THEN]]:345// CHECK-NEXT: [[TMP1:%.*]] = load volatile i32, ptr @i, align 4, !tbaa [[INT_TBAA2:![0-9]+]]346// CHECK-NEXT: switch i32 [[TMP1]], label %[[SW_EPILOG:.*]] [347// CHECK-NEXT: ]348// CHECK: [[SW_EPILOG]]:349// CHECK-NEXT: br label %[[IF_END:.*]]350// CHECK: [[IF_ELSE]]:351// CHECK-NEXT: store volatile i8 1, ptr @b, align 1, !tbaa [[BOOL_TBAA6]]352// CHECK-NEXT: br label %[[IF_END]]353// CHECK: [[IF_END]]:354// CHECK-NEXT: [[TMP2:%.*]] = load volatile i8, ptr @b, align 1, !tbaa [[BOOL_TBAA6]], !range [[RNG8]], !noundef [[META9]]355// CHECK-NEXT: [[LOADEDV1:%.*]] = trunc i8 [[TMP2]] to i1356// CHECK-NEXT: br i1 [[LOADEDV1]], label %[[IF_THEN2:.*]], label %[[IF_ELSE4:.*]]357// CHECK: [[IF_THEN2]]:358// CHECK-NEXT: [[TMP3:%.*]] = load volatile i32, ptr @i, align 4, !tbaa [[INT_TBAA2]]359// CHECK-NEXT: switch i32 [[TMP3]], label %[[SW_EPILOG3:.*]] [360// CHECK-NEXT: ]361// CHECK: [[SW_EPILOG3]]:362// CHECK-NEXT: br label %[[IF_END5:.*]]363// CHECK: [[IF_ELSE4]]:364// CHECK-NEXT: store volatile i8 1, ptr @b, align 1, !tbaa [[BOOL_TBAA6]]365// CHECK-NEXT: br label %[[IF_END5]]366// CHECK: [[IF_END5]]:367// CHECK-NEXT: ret void368//369void SwitchStmt() {370 if (b)371 [[unlikely]] switch (i) {}372 else {373 // Make sure the branches aren't optimized away.374 b = true;375 }376 if (b)377 switch (i)378 [[unlikely]] {}379 else {380 // Make sure the branches aren't optimized away.381 b = true;382 }383}384 385//.386// CHECK: [[INT_TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}387// CHECK: [[META3]] = !{!"int", [[META4:![0-9]+]], i64 0}388// CHECK: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}389// CHECK: [[META5]] = !{!"Simple C++ TBAA"}390// CHECK: [[BOOL_TBAA6]] = !{[[META7:![0-9]+]], [[META7]], i64 0}391// CHECK: [[META7]] = !{!"bool", [[META4]], i64 0}392// CHECK: [[RNG8]] = !{i8 0, i8 2}393// CHECK: [[META9]] = !{}394// CHECK: [[LOOP10]] = distinct !{[[LOOP10]], [[META11:![0-9]+]], [[META12:![0-9]+]]}395// CHECK: [[META11]] = !{!"llvm.loop.mustprogress"}396// CHECK: [[META12]] = !{!"llvm.loop.unroll.disable"}397// CHECK: [[LOOP13]] = distinct !{[[LOOP13]], [[META11]], [[META12]]}398// CHECK: [[LOOP14]] = distinct !{[[LOOP14]], [[META11]], [[META12]]}399// CHECK: [[LOOP15]] = distinct !{[[LOOP15]], [[META11]], [[META12]]}400// CHECK: [[LOOP16]] = distinct !{[[LOOP16]], [[META11]], [[META12]]}401// CHECK: [[LOOP17]] = distinct !{[[LOOP17]], [[META11]], [[META12]]}402//.403