; CHECK-NOT: call void @__msan_warning
; CHECK: icmp slt
; CHECK-NOT: call void @__msan_warning
-; CHECK: icmp slt
-; CHECK-NOT: call void @__msan_warning
; CHECK: ret i1
define zeroext i1 @ICmpSGE(i32 %x) nounwind uwtable readnone {
}
; CHECK: @ICmpSGE
-; CHECK: icmp sge
-; CHECK-NOT: call void @__msan_warning
-; CHECK: icmp sge
+; CHECK: icmp slt
; CHECK-NOT: call void @__msan_warning
; CHECK: icmp sge
; CHECK-NOT: call void @__msan_warning
}
; CHECK: @ICmpSGT
-; CHECK: icmp sgt
-; CHECK-NOT: call void @__msan_warning
-; CHECK: icmp sgt
+; CHECK: icmp slt
; CHECK-NOT: call void @__msan_warning
; CHECK: icmp sgt
; CHECK-NOT: call void @__msan_warning
}
; CHECK: @ICmpSLE
-; CHECK: icmp sle
-; CHECK-NOT: call void @__msan_warning
-; CHECK: icmp sle
+; CHECK: icmp slt
; CHECK-NOT: call void @__msan_warning
; CHECK: icmp sle
; CHECK-NOT: call void @__msan_warning
; CHECK: @ICmpSLT_vector
; CHECK: icmp slt <2 x i64>
; CHECK-NOT: call void @__msan_warning
-; CHECK: icmp slt <2 x i64>
-; CHECK-NOT: call void @__msan_warning
; CHECK: icmp slt <2 x i32*>
; CHECK-NOT: call void @__msan_warning
; CHECK: ret <2 x i1>
-; Check that we propagate shadow for arbitrary relational comparisons
+; Check that we propagate shadow for unsigned relational comparisons with
+; constants
-define zeroext i1 @ICmpSLENonZero(i32 %x, i32 %y) nounwind uwtable readnone {
+define zeroext i1 @ICmpUGTConst(i32 %x) nounwind uwtable readnone {
entry:
- %cmp = icmp sle i32 %x, %y
+ %cmp = icmp ugt i32 %x, 7
ret i1 %cmp
}
-; CHECK: @ICmpSLENonZero
-; CHECK: icmp sle i32
+; CHECK: @ICmpUGTConst
+; CHECK: icmp ugt i32
; CHECK-NOT: call void @__msan_warning
-; CHECK: icmp sle i32
+; CHECK: icmp ugt i32
; CHECK-NOT: call void @__msan_warning
-; CHECK: icmp sle i32
+; CHECK: icmp ugt i32
; CHECK-NOT: call void @__msan_warning
; CHECK: ret i1