1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -S -p typepromotion %s -o - | FileCheck %s
target triple = "arm64-apple-macosx15.0.0"
define i4 @gep_offset_signedness(ptr %ptr, i8 %offset, i1 %cond) {
; CHECK-LABEL: define i4 @gep_offset_signedness(
; CHECK-SAME: ptr [[PTR:%.*]], i8 [[OFFSET:%.*]], i1 [[COND:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*]]:
; CHECK-NEXT: [[UNUSED_TRUNC:%.*]] = trunc i8 [[OFFSET]] to i4
; CHECK-NEXT: [[PTR_IDX:%.*]] = getelementptr i8, ptr [[PTR]], i8 [[OFFSET]]
; CHECK-NEXT: [[COND_2:%.*]] = icmp uge ptr [[PTR_IDX]], [[PTR]]
; CHECK-NEXT: br i1 [[COND_2]], label %[[RETURN:.*]], label %[[ELSE:.*]]
; CHECK: [[RETURN]]:
; CHECK-NEXT: [[RET_VAL:%.*]] = phi i4 [ 0, %[[ELSE_RET:.*]] ], [ 1, %[[ENTRY]] ], [ 0, %[[ELSE]] ]
; CHECK-NEXT: ret i4 [[RET_VAL]]
; CHECK: [[ELSE]]:
; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 0, 0
; CHECK-NEXT: [[COND_3:%.*]] = icmp ult i8 [[ADD]], [[OFFSET]]
; CHECK-NEXT: br i1 [[COND]], label %[[RETURN]], label %[[ELSE_RET]]
; CHECK: [[ELSE_RET]]:
; CHECK-NEXT: br label %[[RETURN]]
;
entry:
%unused_trunc = trunc i8 %offset to i4
%ptr.idx = getelementptr i8, ptr %ptr, i8 %offset
%cond.2 = icmp uge ptr %ptr.idx, %ptr
br i1 %cond.2, label %return, label %else
return: ; preds = %else.ret, %else, %entry
%ret.val = phi i4 [ 0, %else.ret ], [ 1, %entry ], [ 0, %else ]
ret i4 %ret.val
else: ; preds = %entry
%add = add nuw i8 0, 0
%cond.3 = icmp ult i8 %add, %offset
br i1 %cond, label %return, label %else.ret
else.ret: ; preds = %else
br label %return
}
|