ret i1 %or
}
+define i1 @bools2_logical_commute3_nopoison(i1 %a, i1 %b, i1 noundef %c) {
+; CHECK-LABEL: @bools2_logical_commute3_nopoison(
+; CHECK-NEXT: [[OR:%.*]] = select i1 [[C:%.*]], i1 [[A:%.*]], i1 [[B:%.*]]
+; CHECK-NEXT: ret i1 [[OR]]
+;
+ %not = xor i1 %c, -1
+ %and1 = select i1 %a, i1 %c, i1 false
+ %and2 = select i1 %b, i1 %not, i1 false
+ %or = select i1 %and1, i1 true, i1 %and2
+ ret i1 %or
+}
+
define i1 @bools2_logical_commute3_and1(i1 %a, i1 %b, i1 %c) {
; CHECK-LABEL: @bools2_logical_commute3_and1(
; CHECK-NEXT: [[OR:%.*]] = select i1 [[C:%.*]], i1 [[A:%.*]], i1 [[B:%.*]]