@@ -999,5 +999,87 @@ loop.latch:
999
999
br label %loop
1000
1000
}
1001
1001
1002
+ define i1 @not_cond (i1 %c ) {
1003
+ ; CHECK-LABEL: @not_cond(
1004
+ ; CHECK-NEXT: [[C_NOT:%.*]] = xor i1 [[C:%.*]], true
1005
+ ; CHECK-NEXT: br i1 [[C_NOT]], label [[IF:%.*]], label [[ELSE:%.*]]
1006
+ ; CHECK: if:
1007
+ ; CHECK-NEXT: ret i1 false
1008
+ ; CHECK: else:
1009
+ ; CHECK-NEXT: ret i1 true
1010
+ ;
1011
+ %c.not = xor i1 %c , true
1012
+ br i1 %c.not , label %if , label %else
1013
+
1014
+ if:
1015
+ ret i1 %c
1016
+
1017
+ else:
1018
+ ret i1 %c
1019
+ }
1020
+
1021
+ define i32 @not_cond_icmp (i32 %x ) {
1022
+ ; CHECK-LABEL: @not_cond_icmp(
1023
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], 42
1024
+ ; CHECK-NEXT: [[CMP_NOT:%.*]] = xor i1 [[CMP]], true
1025
+ ; CHECK-NEXT: br i1 [[CMP_NOT]], label [[IF:%.*]], label [[ELSE:%.*]]
1026
+ ; CHECK: if:
1027
+ ; CHECK-NEXT: ret i32 [[X]]
1028
+ ; CHECK: else:
1029
+ ; CHECK-NEXT: ret i32 42
1030
+ ;
1031
+ %cmp = icmp eq i32 %x , 42
1032
+ %cmp.not = xor i1 %cmp , true
1033
+ br i1 %cmp.not , label %if , label %else
1034
+
1035
+ if:
1036
+ ret i32 %x
1037
+
1038
+ else:
1039
+ ret i32 %x
1040
+ }
1041
+
1042
+ define i1 @not_cond_logic1 (i1 %c , i1 %d ) {
1043
+ ; CHECK-LABEL: @not_cond_logic1(
1044
+ ; CHECK-NEXT: [[C_NOT:%.*]] = xor i1 [[C:%.*]], true
1045
+ ; CHECK-NEXT: [[AND:%.*]] = and i1 [[C_NOT]], [[D:%.*]]
1046
+ ; CHECK-NEXT: br i1 [[AND]], label [[IF:%.*]], label [[ELSE:%.*]]
1047
+ ; CHECK: if:
1048
+ ; CHECK-NEXT: ret i1 false
1049
+ ; CHECK: else:
1050
+ ; CHECK-NEXT: ret i1 [[C]]
1051
+ ;
1052
+ %c.not = xor i1 %c , true
1053
+ %and = and i1 %c.not , %d
1054
+ br i1 %and , label %if , label %else
1055
+
1056
+ if:
1057
+ ret i1 %c
1058
+
1059
+ else:
1060
+ ret i1 %c
1061
+ }
1062
+
1063
+ define i1 @not_cond_logic2 (i1 %c , i1 %d ) {
1064
+ ; CHECK-LABEL: @not_cond_logic2(
1065
+ ; CHECK-NEXT: [[C_NOT:%.*]] = xor i1 [[C:%.*]], true
1066
+ ; CHECK-NEXT: [[AND:%.*]] = or i1 [[C_NOT]], [[D:%.*]]
1067
+ ; CHECK-NEXT: br i1 [[AND]], label [[IF:%.*]], label [[ELSE:%.*]]
1068
+ ; CHECK: if:
1069
+ ; CHECK-NEXT: ret i1 [[C]]
1070
+ ; CHECK: else:
1071
+ ; CHECK-NEXT: ret i1 true
1072
+ ;
1073
+ %c.not = xor i1 %c , true
1074
+ %or = or i1 %c.not , %d
1075
+ br i1 %or , label %if , label %else
1076
+
1077
+ if:
1078
+ ret i1 %c
1079
+
1080
+ else:
1081
+ ret i1 %c
1082
+ }
1083
+
1002
1084
declare void @use_bool (i1 )
1003
1085
declare void @use_ptr (ptr )
0 commit comments