@@ -1112,3 +1112,36 @@ cleanup:
11121112 %retval.0 = phi i1 [ %cmp , %if.then ], [ %tobool , %if.end4 ]
11131113 ret i1 %retval.0
11141114}
1115+
1116+
1117+ define i32 @issue_124275_wrong_br_direction (i32 noundef %inp ) {
1118+ ; CHECK-LABEL: @issue_124275_wrong_br_direction(
1119+ ; CHECK-NEXT: entry:
1120+ ; CHECK-NEXT: [[CMP_NE_NOT:%.*]] = icmp eq i32 [[INP:%.*]], 1
1121+ ; CHECK-NEXT: br i1 [[CMP_NE_NOT]], label [[B1:%.*]], label [[B0:%.*]]
1122+ ; CHECK: B0:
1123+ ; CHECK-NEXT: br label [[B1]]
1124+ ; CHECK: B1:
1125+ ; CHECK-NEXT: br i1 true, label [[B0]], label [[END:%.*]]
1126+ ; CHECK: end:
1127+ ; CHECK-NEXT: ret i32 0
1128+ ;
1129+ entry:
1130+ %xor_inp = xor i32 %inp , 1
1131+ %sub = sub i32 0 , %xor_inp
1132+ %cmp_ne = icmp ne i32 %sub , 0
1133+ br i1 %cmp_ne , label %B0 , label %B1
1134+
1135+ B0:
1136+ %phi_B0 = phi i32 [ %phi_B1 , %B1 ], [ %sub , %entry ]
1137+ br label %B1
1138+
1139+ B1:
1140+ %phi_B1 = phi i32 [ %phi_B0 , %B0 ], [ 0 , %entry ]
1141+ %cmp_ne_B1 = icmp ne i32 %phi_B1 , 0
1142+ %cmp_eq_B1 = xor i1 %cmp_ne_B1 , true
1143+ br i1 %cmp_eq_B1 , label %B0 , label %end
1144+
1145+ end:
1146+ ret i32 0
1147+ }
0 commit comments