brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.0 KiB · 9d33be9 Raw
337 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=mergeicmps -verify-dom-info -S -mtriple=x86_64-unknown-unknown | FileCheck %s3 4%struct.S = type { i8, i8, i8, i8 }5%struct1.S = type { i32, i32, i32, i8 }6%"struct.media::WebrtcVideoStatsDB::VideoDescKey" = type { i8, i32, i8, i32 }7%"c" = type { i32, i32, i32, float}8 9define noundef i1 @full_sequent_ne(ptr nocapture readonly align 1 dereferenceable(4) %s0, ptr nocapture readonly align 1 dereferenceable(4) %s1) {10; CHECK-LABEL: @full_sequent_ne(11; CHECK-NEXT:  bb0:12; CHECK-NEXT:    [[V0:%.*]] = load i8, ptr [[S0:%.*]], align 113; CHECK-NEXT:    [[V1:%.*]] = load i8, ptr [[S1:%.*]], align 114; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i8 [[V0]], [[V1]]15; CHECK-NEXT:    br i1 [[CMP0]], label [[BB1:%.*]], label [[BB4:%.*]]16; CHECK:       bb1:17; CHECK-NEXT:    [[S2:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[S0]], i64 0, i32 118; CHECK-NEXT:    [[V2:%.*]] = load i8, ptr [[S2]], align 119; CHECK-NEXT:    [[S3:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S1]], i64 0, i32 120; CHECK-NEXT:    [[V3:%.*]] = load i8, ptr [[S3]], align 121; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[V2]], [[V3]]22; CHECK-NEXT:    br i1 [[CMP1]], label [[BB2:%.*]], label [[BB4]]23; CHECK:       bb2:24; CHECK-NEXT:    [[S4:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S0]], i64 0, i32 225; CHECK-NEXT:    [[V4:%.*]] = load i8, ptr [[S4]], align 126; CHECK-NEXT:    [[S5:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S1]], i64 0, i32 227; CHECK-NEXT:    [[V5:%.*]] = load i8, ptr [[S5]], align 128; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[V4]], [[V5]]29; CHECK-NEXT:    br i1 [[CMP2]], label [[BB3:%.*]], label [[BB4]]30; CHECK:       bb3:31; CHECK-NEXT:    [[S6:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S0]], i64 0, i32 332; CHECK-NEXT:    [[V6:%.*]] = load i8, ptr [[S6]], align 133; CHECK-NEXT:    [[S7:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S1]], i64 0, i32 334; CHECK-NEXT:    [[V7:%.*]] = load i8, ptr [[S7]], align 135; CHECK-NEXT:    [[CMP3:%.*]] = icmp ne i8 [[V6]], [[V7]]36; CHECK-NEXT:    br label [[BB4]]37; CHECK:       bb4:38; CHECK-NEXT:    [[CMP:%.*]] = phi i1 [ true, [[BB0:%.*]] ], [ true, [[BB1]] ], [ true, [[BB2]] ], [ [[CMP3]], [[BB3]] ]39; CHECK-NEXT:    ret i1 [[CMP]]40;41bb0:42  %v0 = load i8, ptr %s0, align 143  %v1 = load i8, ptr %s1, align 144  %cmp0 = icmp eq i8 %v0, %v145  br i1 %cmp0, label %bb1, label %bb446 47bb1:                                              ; preds = %bb048  %s2 = getelementptr inbounds %struct.S, ptr %s0, i64 0, i32 149  %v2 = load i8, ptr %s2, align 150  %s3 = getelementptr inbounds %struct.S, ptr %s1, i64 0, i32 151  %v3 = load i8, ptr %s3, align 152  %cmp1 = icmp eq i8 %v2, %v353  br i1 %cmp1, label %bb2, label %bb454 55bb2:                                             ; preds = %bb156  %s4 = getelementptr inbounds %struct.S, ptr %s0, i64 0, i32 257  %v4 = load i8, ptr %s4, align 158  %s5 = getelementptr inbounds %struct.S, ptr %s1, i64 0, i32 259  %v5 = load i8, ptr %s5, align 160  %cmp2 = icmp eq i8 %v4, %v561  br i1 %cmp2, label %bb3, label %bb462 63bb3:                                               ; preds = %bb264  %s6 = getelementptr inbounds %struct.S, ptr %s0, i64 0, i32 365  %v6 = load i8, ptr %s6, align 166  %s7 = getelementptr inbounds %struct.S, ptr %s1, i64 0, i32 367  %v7 = load i8, ptr %s7, align 168  %cmp3 = icmp ne i8 %v6, %v769  br label %bb470 71bb4:                                               ; preds = %bb0, %bb1, %bb2, %bb372  %cmp = phi i1 [ true, %bb0 ], [ true, %bb1 ], [ true, %bb2 ], [ %cmp3, %bb3 ]73  ret i1 %cmp74}75 76; Negative test: Incorrect const value in PHI node77define noundef i1 @cmp_ne_incorrect_const(ptr nocapture readonly align 1 dereferenceable(4) %s0, ptr nocapture readonly align 1 dereferenceable(4) %s1) {78; CHECK-LABEL: @cmp_ne_incorrect_const(79; CHECK-NEXT:  bb0:80; CHECK-NEXT:    [[V0:%.*]] = load i8, ptr [[S0:%.*]], align 181; CHECK-NEXT:    [[V1:%.*]] = load i8, ptr [[S1:%.*]], align 182; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i8 [[V0]], [[V1]]83; CHECK-NEXT:    br i1 [[CMP0]], label [[BB1:%.*]], label [[BB2:%.*]]84; CHECK:       bb1:85; CHECK-NEXT:    [[S6:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[S0]], i64 0, i32 186; CHECK-NEXT:    [[V6:%.*]] = load i8, ptr [[S6]], align 187; CHECK-NEXT:    [[S7:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S1]], i64 0, i32 188; CHECK-NEXT:    [[V7:%.*]] = load i8, ptr [[S7]], align 189; CHECK-NEXT:    [[CMP3:%.*]] = icmp ne i8 [[V6]], [[V7]]90; CHECK-NEXT:    br label [[BB2]]91; CHECK:       bb2:92; CHECK-NEXT:    [[CMP:%.*]] = phi i1 [ false, [[BB0:%.*]] ], [ [[CMP3]], [[BB1]] ]93; CHECK-NEXT:    ret i1 [[CMP]]94;95bb0:96  %v0 = load i8, ptr %s0, align 197  %v1 = load i8, ptr %s1, align 198  %cmp0 = icmp eq i8 %v0, %v199  br i1 %cmp0, label %bb1, label %bb2100 101bb1:                                               ; preds = %bb0102  %s6 = getelementptr inbounds %struct.S, ptr %s0, i64 0, i32 1103  %v6 = load i8, ptr %s6, align 1104  %s7 = getelementptr inbounds %struct.S, ptr %s1, i64 0, i32 1105  %v7 = load i8, ptr %s7, align 1106  %cmp3 = icmp ne i8 %v6, %v7107  br label %bb2108 109bb2:                                               ; preds = %bb0, %bb1110  %cmp = phi i1 [ false, %bb0 ], [ %cmp3, %bb1 ]111  ret i1 %cmp112}113 114; https://alive2.llvm.org/ce/z/Zi2Z3Y115define noundef i1 @partial_sequent_eq(ptr nocapture readonly dereferenceable(16) %s0, ptr nocapture readonly dereferenceable(16) %s1) {116; CHECK-LABEL: @partial_sequent_eq(117; CHECK-NEXT:  bb01:118; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[S0:%.*]], align 8119; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[S1:%.*]], align 8120; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]121; CHECK-NEXT:    br i1 [[TMP2]], label %"bb1+bb2", label [[BB3:%.*]]122; CHECK:       "bb1+bb2":123; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [[STRUCT1_S:%.*]], ptr [[S0]], i64 0, i32 2124; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT1_S]], ptr [[S1]], i64 0, i32 2125; CHECK-NEXT:    [[MEMCMP:%.*]] = call i32 @memcmp(ptr [[TMP3]], ptr [[TMP4]], i64 5)126; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i32 [[MEMCMP]], 0127; CHECK-NEXT:    br label [[BB3]]128; CHECK:       bb3:129; CHECK-NEXT:    [[CMP:%.*]] = phi i1 [ [[TMP5]], %"bb1+bb2" ], [ false, [[BB01:%.*]] ]130; CHECK-NEXT:    ret i1 [[CMP]]131;132bb0:133  %v0 = load i32, ptr %s0, align 8134  %v1 = load i32, ptr %s1, align 8135  %cmp0 = icmp eq i32 %v0, %v1136  br i1 %cmp0, label %bb1, label %bb3137 138bb1:                                              ; preds = %bb0139  %s2 = getelementptr inbounds %struct1.S, ptr %s0, i64 0, i32 2140  %v2 = load i32, ptr %s2, align 8141  %s3 = getelementptr inbounds %struct1.S, ptr %s1, i64 0, i32 2142  %v3 = load i32, ptr %s3, align 8143  %cmp1 = icmp eq i32 %v2, %v3144  br i1 %cmp1, label %bb2, label %bb3145 146bb2:                                               ; preds = %bb2147  %s6 = getelementptr inbounds %struct1.S, ptr %s0, i64 0, i32 3148  %v6 = load i8, ptr %s6, align 1149  %s7 = getelementptr inbounds %struct1.S, ptr %s1, i64 0, i32 3150  %v7 = load i8, ptr %s7, align 1151  %cmp3 = icmp eq i8 %v6, %v7152  br label %bb3153 154bb3:                                               ; preds = %bb0, %bb1, %bb2155  %cmp = phi i1 [ false, %bb0 ], [ false, %bb1 ], [ %cmp3, %bb2 ]156  ret i1 %cmp157}158 159; https://alive2.llvm.org/ce/z/sL5Uz6160define noundef i1 @partial_sequent_ne(ptr nocapture readonly dereferenceable(16) %s0, ptr nocapture readonly dereferenceable(16) %s1) {161; CHECK-LABEL: @partial_sequent_ne(162; CHECK-NEXT:  bb0:163; CHECK-NEXT:    [[V0:%.*]] = load i32, ptr [[S0:%.*]], align 8164; CHECK-NEXT:    [[V1:%.*]] = load i32, ptr [[S1:%.*]], align 8165; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i32 [[V0]], [[V1]]166; CHECK-NEXT:    br i1 [[CMP0]], label [[BB1:%.*]], label [[BB3:%.*]]167; CHECK:       bb1:168; CHECK-NEXT:    [[S2:%.*]] = getelementptr inbounds [[STRUCT1_S:%.*]], ptr [[S0]], i64 0, i32 2169; CHECK-NEXT:    [[V2:%.*]] = load i32, ptr [[S2]], align 8170; CHECK-NEXT:    [[S3:%.*]] = getelementptr inbounds [[STRUCT1_S]], ptr [[S1]], i64 0, i32 2171; CHECK-NEXT:    [[V3:%.*]] = load i32, ptr [[S3]], align 8172; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[V2]], [[V3]]173; CHECK-NEXT:    br i1 [[CMP1]], label [[BB2:%.*]], label [[BB3]]174; CHECK:       bb2:175; CHECK-NEXT:    [[S6:%.*]] = getelementptr inbounds [[STRUCT1_S]], ptr [[S0]], i64 0, i32 3176; CHECK-NEXT:    [[V6:%.*]] = load i8, ptr [[S6]], align 1177; CHECK-NEXT:    [[S7:%.*]] = getelementptr inbounds [[STRUCT1_S]], ptr [[S1]], i64 0, i32 3178; CHECK-NEXT:    [[V7:%.*]] = load i8, ptr [[S7]], align 1179; CHECK-NEXT:    [[CMP3:%.*]] = icmp ne i8 [[V6]], [[V7]]180; CHECK-NEXT:    br label [[BB3]]181; CHECK:       bb3:182; CHECK-NEXT:    [[CMP:%.*]] = phi i1 [ true, [[BB0:%.*]] ], [ true, [[BB1]] ], [ [[CMP3]], [[BB2]] ]183; CHECK-NEXT:    ret i1 [[CMP]]184;185bb0:186  %v0 = load i32, ptr %s0, align 8187  %v1 = load i32, ptr %s1, align 8188  %cmp0 = icmp eq i32 %v0, %v1189  br i1 %cmp0, label %bb1, label %bb3190 191bb1:                                              ; preds = %bb0192  %s2 = getelementptr inbounds %struct1.S, ptr %s0, i64 0, i32 2193  %v2 = load i32, ptr %s2, align 8194  %s3 = getelementptr inbounds %struct1.S, ptr %s1, i64 0, i32 2195  %v3 = load i32, ptr %s3, align 8196  %cmp1 = icmp eq i32 %v2, %v3197  br i1 %cmp1, label %bb2, label %bb3198 199bb2:                                               ; preds = %bb2200  %s6 = getelementptr inbounds %struct1.S, ptr %s0, i64 0, i32 3201  %v6 = load i8, ptr %s6, align 1202  %s7 = getelementptr inbounds %struct1.S, ptr %s1, i64 0, i32 3203  %v7 = load i8, ptr %s7, align 1204  %cmp3 = icmp ne i8 %v6, %v7205  br label %bb3206 207bb3:                                               ; preds = %bb0, %bb1, %bb2208  %cmp = phi i1 [ true, %bb0 ], [ true, %bb1 ], [ %cmp3, %bb2 ]209  ret i1 %cmp210}211 212; https://alive2.llvm.org/ce/z/EQtb_S213define i1 @WebrtcVideoStats(ptr nocapture noundef dereferenceable(16) %S0, ptr nocapture noundef dereferenceable(16) %S1) {214; CHECK-LABEL: @WebrtcVideoStats(215; CHECK-NEXT:  bb0:216; CHECK-NEXT:    [[V0:%.*]] = load i8, ptr [[S0:%.*]], align 4217; CHECK-NEXT:    [[V1:%.*]] = load i8, ptr [[S1:%.*]], align 4218; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i8 [[V0]], [[V1]]219; CHECK-NEXT:    br i1 [[CMP0]], label [[BB1:%.*]], label [[BB4:%.*]]220; CHECK:       bb1:221; CHECK-NEXT:    [[BASE2:%.*]] = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr [[S0]], i64 0, i32 1222; CHECK-NEXT:    [[V2:%.*]] = load i32, ptr [[BASE2]], align 4223; CHECK-NEXT:    [[BASE3:%.*]] = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr [[S1]], i64 0, i32 1224; CHECK-NEXT:    [[V3:%.*]] = load i32, ptr [[BASE3]], align 4225; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[V2]], [[V3]]226; CHECK-NEXT:    br i1 [[CMP1]], label [[BB2:%.*]], label [[BB4]]227; CHECK:       bb2:228; CHECK-NEXT:    [[BASE4:%.*]] = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr [[S0]], i64 0, i32 2229; CHECK-NEXT:    [[V4:%.*]] = load i8, ptr [[BASE4]], align 4230; CHECK-NEXT:    [[BASE5:%.*]] = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr [[S1]], i64 0, i32 2231; CHECK-NEXT:    [[V5:%.*]] = load i8, ptr [[BASE5]], align 4232; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[V4]], [[V5]]233; CHECK-NEXT:    br i1 [[CMP2]], label [[BB3:%.*]], label [[BB4]]234; CHECK:       bb3:235; CHECK-NEXT:    [[BASE6:%.*]] = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr [[S0]], i64 0, i32 3236; CHECK-NEXT:    [[V6:%.*]] = load i32, ptr [[BASE6]], align 4237; CHECK-NEXT:    [[BASE7:%.*]] = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr [[S1]], i64 0, i32 3238; CHECK-NEXT:    [[V7:%.*]] = load i32, ptr [[BASE7]], align 4239; CHECK-NEXT:    [[CMP3:%.*]] = icmp ne i32 [[V6]], [[V7]]240; CHECK-NEXT:    br label [[BB4]]241; CHECK:       bb4:242; CHECK-NEXT:    [[RESULT:%.*]] = phi i1 [ [[CMP3]], [[BB3]] ], [ true, [[BB2]] ], [ true, [[BB1]] ], [ true, [[BB0:%.*]] ]243; CHECK-NEXT:    ret i1 [[RESULT]]244;245bb0:246  %V0 = load i8, ptr %S0, align 4247  %V1 = load i8, ptr %S1, align 4248  %Cmp0 = icmp eq i8 %V0, %V1249  br i1 %Cmp0, label %bb1, label %bb4250 251bb1:                                                ; preds = %bb0252  %Base2 = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr %S0, i64 0, i32 1253  %V2 = load i32, ptr %Base2, align 4254  %Base3 = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr %S1, i64 0, i32 1255  %V3 = load i32, ptr %Base3, align 4256  %Cmp1 = icmp eq i32 %V2, %V3257  br i1 %Cmp1, label %bb2, label %bb4258 259bb2:                                               ; preds = %bb1260  %Base4 = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr %S0, i64 0, i32 2261  %V4 = load i8, ptr %Base4, align 4262  %Base5 = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr %S1, i64 0, i32 2263  %V5 = load i8, ptr %Base5, align 4264  %Cmp2 = icmp eq i8 %V4, %V5265  br i1 %Cmp2, label %bb3, label %bb4266 267bb3:                                               ; preds = %bb2268  %Base6 = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr %S0, i64 0, i32 3269  %V6 = load i32, ptr %Base6, align 4270  %Base7 = getelementptr inbounds %"struct.media::WebrtcVideoStatsDB::VideoDescKey", ptr %S1, i64 0, i32 3271  %V7 = load i32, ptr %Base7, align 4272  %Cmp3 = icmp ne i32 %V6, %V7273  br label %bb4274 275bb4:                                               ; preds = %bb3, %bb2, %bb1, %bb0276  %result = phi i1 [ %Cmp3, %bb3 ], [ true, %bb2 ], [ true, %bb1 ], [ true, %bb0 ]277  ret i1 %result278}279 280; the comparison link sequence will be reordered according the memory offset,281; and the unconditionla comparison will not at the end of the chain.282define i1 @full_revert_order_ne(ptr nocapture noundef nonnull readonly dereferenceable(24) %0, ptr nocapture noundef nonnull readonly dereferenceable(24) %1) {283; CHECK-LABEL: @full_revert_order_ne(284; CHECK-NEXT:  bb0:285; CHECK-NEXT:    [[S0:%.*]] = getelementptr inbounds [[C:%.*]], ptr [[TMP0:%.*]], i64 0, i32 2286; CHECK-NEXT:    [[V0:%.*]] = load i32, ptr [[S0]], align 4287; CHECK-NEXT:    [[S1:%.*]] = getelementptr inbounds [[C]], ptr [[TMP1:%.*]], i64 0, i32 2288; CHECK-NEXT:    [[V1:%.*]] = load i32, ptr [[S1]], align 4289; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i32 [[V0]], [[V1]]290; CHECK-NEXT:    br i1 [[CMP0]], label [[BB1:%.*]], label [[BB3:%.*]]291; CHECK:       bb1:292; CHECK-NEXT:    [[S2:%.*]] = getelementptr inbounds [[C]], ptr [[TMP0]], i64 0, i32 1293; CHECK-NEXT:    [[V2:%.*]] = load i32, ptr [[S2]], align 4294; CHECK-NEXT:    [[S3:%.*]] = getelementptr inbounds [[C]], ptr [[TMP1]], i64 0, i32 1295; CHECK-NEXT:    [[V3:%.*]] = load i32, ptr [[S3]], align 4296; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[V2]], [[V3]]297; CHECK-NEXT:    br i1 [[CMP1]], label [[BB2:%.*]], label [[BB3]]298; CHECK:       bb2:299; CHECK-NEXT:    [[S4:%.*]] = getelementptr inbounds [[C]], ptr [[TMP0]], i64 0, i32 0300; CHECK-NEXT:    [[V4:%.*]] = load i32, ptr [[S4]], align 4301; CHECK-NEXT:    [[S5:%.*]] = getelementptr inbounds [[C]], ptr [[TMP1]], i64 0, i32 0302; CHECK-NEXT:    [[V5:%.*]] = load i32, ptr [[S5]], align 4303; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i32 [[V4]], [[V5]]304; CHECK-NEXT:    br label [[BB3]]305; CHECK:       bb3:306; CHECK-NEXT:    [[CMP3:%.*]] = phi i1 [ true, [[BB1]] ], [ true, [[BB0:%.*]] ], [ [[CMP2]], [[BB2]] ]307; CHECK-NEXT:    ret i1 [[CMP3]]308;309bb0:310  %s0 = getelementptr inbounds %"c", ptr %0, i64 0, i32 2311  %v0 = load i32, ptr %s0, align 4312  %s1 = getelementptr inbounds %"c", ptr %1, i64 0, i32 2313  %v1 = load i32, ptr %s1, align 4314  %cmp0 = icmp eq i32 %v0, %v1315  br i1 %cmp0, label %bb1, label %bb3316 317bb1:                                                ; preds = %bb0318  %s2 = getelementptr inbounds %"c", ptr %0, i64 0, i32 1319  %v2 = load i32, ptr %s2, align 4320  %s3 = getelementptr inbounds %"c", ptr %1, i64 0, i32 1321  %v3 = load i32, ptr %s3, align 4322  %cmp1 = icmp eq i32 %v2, %v3323  br i1 %cmp1, label %bb2, label %bb3324 325bb2:                                               ; preds = %bb1326  %s4 = getelementptr inbounds %"c", ptr %0, i64 0, i32 0327  %v4 = load i32, ptr %s4, align 4328  %s5 = getelementptr inbounds %"c", ptr %1, i64 0, i32 0329  %v5 = load i32, ptr %s5, align 4330  %cmp2 = icmp ne i32 %v4, %v5331  br label %bb3332 333bb3:                                               ; preds = %bb2, %bb1, %bb0334  %cmp3 = phi i1 [ true, %bb1 ], [ true, %bb0 ], [ %cmp2, %bb2 ]335  ret i1 %cmp3336}337