Skip to content

Commit 6eedf99

Browse files
[TypePromotion] Introduce test for PR134281 (NFC)
1 parent 846000c commit 6eedf99

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -p typepromotion %s -o - | FileCheck %s
3+
4+
target triple = "arm64-apple-macosx15.0.0"
5+
6+
; FIXME: This is a miscompilation, unused trunc is converted to used zext for gep offset,
7+
; which is to be treated as signed.
8+
define i4 @gep_offset_signedness(ptr %ptr, i8 %offset, i1 %cond) {
9+
; CHECK-LABEL: define i4 @gep_offset_signedness(
10+
; CHECK-SAME: ptr [[PTR:%.*]], i8 [[OFFSET:%.*]], i1 [[COND:%.*]]) {
11+
; CHECK-NEXT: [[ENTRY:.*]]:
12+
; CHECK-NEXT: [[TMP0:%.*]] = zext i8 [[OFFSET]] to i32
13+
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 15
14+
; CHECK-NEXT: [[PTR_IDX:%.*]] = getelementptr i8, ptr [[PTR]], i32 [[TMP0]]
15+
; CHECK-NEXT: [[COND_2:%.*]] = icmp uge ptr [[PTR_IDX]], [[PTR]]
16+
; CHECK-NEXT: br i1 [[COND_2]], label %[[RETURN:.*]], label %[[ELSE:.*]]
17+
; CHECK: [[RETURN]]:
18+
; CHECK-NEXT: [[RET_VAL:%.*]] = phi i4 [ 0, %[[ELSE_RET:.*]] ], [ 1, %[[ENTRY]] ], [ 0, %[[ELSE]] ]
19+
; CHECK-NEXT: ret i4 [[RET_VAL]]
20+
; CHECK: [[ELSE]]:
21+
; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 0, 0
22+
; CHECK-NEXT: [[COND_3:%.*]] = icmp ult i32 [[ADD]], [[TMP0]]
23+
; CHECK-NEXT: br i1 [[COND]], label %[[RETURN]], label %[[ELSE_RET]]
24+
; CHECK: [[ELSE_RET]]:
25+
; CHECK-NEXT: br label %[[RETURN]]
26+
;
27+
entry:
28+
%unused_trunc = trunc i8 %offset to i4
29+
%ptr.idx = getelementptr i8, ptr %ptr, i8 %offset
30+
%cond.2 = icmp uge ptr %ptr.idx, %ptr
31+
br i1 %cond.2, label %return, label %else
32+
33+
return: ; preds = %else.ret, %else, %entry
34+
%ret.val = phi i4 [ 0, %else.ret ], [ 1, %entry ], [ 0, %else ]
35+
ret i4 %ret.val
36+
37+
else: ; preds = %entry
38+
%add = add nuw i8 0, 0
39+
%cond.3 = icmp ult i8 %add, %offset
40+
br i1 %cond, label %return, label %else.ret
41+
42+
else.ret: ; preds = %else
43+
br label %return
44+
}

0 commit comments

Comments
 (0)