@@ -108,3 +108,42 @@ true:
108
108
false:
109
109
ret i8 20
110
110
}
111
+
112
+ ; Negative test: signedness mismatch
113
+ define i8 @scmp_4 (i32 %x , i32 %y ) {
114
+ ; CHECK-LABEL: @scmp_4(
115
+ ; CHECK-NEXT: [[COND:%.*]] = icmp ugt i32 [[X:%.*]], [[Y:%.*]]
116
+ ; CHECK-NEXT: br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
117
+ ; CHECK: true:
118
+ ; CHECK-NEXT: ret i8 20
119
+ ; CHECK: false:
120
+ ; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[X]], i32 [[Y]])
121
+ ; CHECK-NEXT: ret i8 [[R]]
122
+ ;
123
+ %cond = icmp ugt i32 %x , %y
124
+ br i1 %cond , label %true , label %false
125
+ true:
126
+ ret i8 20
127
+ false:
128
+ %r = call i8 @llvm.scmp (i32 %x , i32 %y )
129
+ ret i8 %r
130
+ }
131
+
132
+ define i8 @ucmp_4 (i32 %x , i32 %y ) {
133
+ ; CHECK-LABEL: @ucmp_4(
134
+ ; CHECK-NEXT: [[COND:%.*]] = icmp slt i32 [[X:%.*]], [[Y:%.*]]
135
+ ; CHECK-NEXT: br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
136
+ ; CHECK: true:
137
+ ; CHECK-NEXT: ret i8 20
138
+ ; CHECK: false:
139
+ ; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[X]], i32 [[Y]])
140
+ ; CHECK-NEXT: ret i8 [[R]]
141
+ ;
142
+ %cond = icmp slt i32 %x , %y
143
+ br i1 %cond , label %true , label %false
144
+ true:
145
+ ret i8 20
146
+ false:
147
+ %r = call i8 @llvm.ucmp (i32 %x , i32 %y )
148
+ ret i8 %r
149
+ }
0 commit comments