diff --git a/llvm/test/Transforms/InstCombine/icmp-add.ll b/llvm/test/Transforms/InstCombine/icmp-add.ll index d611a80027cf4..1fbc6d169f103 100644 --- a/llvm/test/Transforms/InstCombine/icmp-add.ll +++ b/llvm/test/Transforms/InstCombine/icmp-add.ll @@ -793,3 +793,49 @@ define i1 @ugt_wrong_offset(i8 %a) { %ov = icmp ugt i8 %t, 251 ret i1 %ov } + +define i1 @ult_offset(i8 %a) { +; CHECK-LABEL: @ult_offset( +; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], -6 +; CHECK-NEXT: [[OV:%.*]] = icmp ult i8 [[T]], 122 +; CHECK-NEXT: ret i1 [[OV]] +; + %t = add i8 %a, 250 + %ov = icmp ult i8 %t, 122 + ret i1 %ov +} + +define i1 @ult_offset_use(i32 %a) { +; CHECK-LABEL: @ult_offset_use( +; CHECK-NEXT: [[T:%.*]] = add i32 [[A:%.*]], 42 +; CHECK-NEXT: call void @use(i32 [[T]]) +; CHECK-NEXT: [[OV:%.*]] = icmp ult i32 [[T]], -2147483606 +; CHECK-NEXT: ret i1 [[OV]] +; + %t = add i32 %a, 42 + call void @use(i32 %t) + %ov = icmp ult i32 %t, 2147483690 + ret i1 %ov +} + +define <2 x i1> @ult_offset_splat(<2 x i5> %a) { +; CHECK-LABEL: @ult_offset_splat( +; CHECK-NEXT: [[T:%.*]] = add <2 x i5> [[A:%.*]], +; CHECK-NEXT: [[OV:%.*]] = icmp ult <2 x i5> [[T]], +; CHECK-NEXT: ret <2 x i1> [[OV]] +; + %t = add <2 x i5> %a, + %ov = icmp ult <2 x i5> %t, + ret <2 x i1> %ov +} + +define i1 @ult_wrong_offset(i8 %a) { +; CHECK-LABEL: @ult_wrong_offset( +; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], -6 +; CHECK-NEXT: [[OV:%.*]] = icmp ult i8 [[T]], 123 +; CHECK-NEXT: ret i1 [[OV]] +; + %t = add i8 %a, 250 + %ov = icmp ult i8 %t, 123 + ret i1 %ov +}