Skip to content

Commit 8583154

Browse files
committed
[CodeGenPrepare] Add pre-commit tests. NFC.
1 parent a348f22 commit 8583154

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' -mtriple=x86_64-unknown-unknown < %s | FileCheck %s
3+
4+
; Make sure the nsw flag is dropped when the load ext is combined.
5+
define i32 @simplify_load_ext_drop_trunc_nsw(ptr %p) {
6+
; CHECK-LABEL: define i32 @simplify_load_ext_drop_trunc_nsw(
7+
; CHECK-SAME: ptr [[P:%.*]]) {
8+
; CHECK-NEXT: [[ENTRY:.*:]]
9+
; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[P]], align 4
10+
; CHECK-NEXT: [[TMP0:%.*]] = and i32 [[X]], 255
11+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nsw i32 [[TMP0]] to i8
12+
; CHECK-NEXT: [[EXT1:%.*]] = sext i8 [[TRUNC]] to i16
13+
; CHECK-NEXT: call void @use(i32 [[TMP0]])
14+
; CHECK-NEXT: [[EXT2:%.*]] = zext i16 [[EXT1]] to i32
15+
; CHECK-NEXT: ret i32 [[EXT2]]
16+
;
17+
entry:
18+
%x = load i32, ptr %p, align 4
19+
%trunc = trunc nsw i32 %x to i8
20+
%ext1 = sext i8 %trunc to i16
21+
%conv2 = and i32 %x, 255
22+
call void @use(i32 %conv2)
23+
%ext2 = zext i16 %ext1 to i32
24+
ret i32 %ext2
25+
}
26+
27+
; Make sure the nsw flag is dropped when the load ext is combined.
28+
define i32 @simplify_load_ext_drop_shl_nsw(ptr %p) {
29+
; CHECK-LABEL: define i32 @simplify_load_ext_drop_shl_nsw(
30+
; CHECK-SAME: ptr [[P:%.*]]) {
31+
; CHECK-NEXT: [[ENTRY:.*:]]
32+
; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[P]], align 4
33+
; CHECK-NEXT: [[TMP0:%.*]] = and i32 [[X]], 255
34+
; CHECK-NEXT: [[SHL:%.*]] = shl nsw i32 [[TMP0]], 24
35+
; CHECK-NEXT: call void @use(i32 [[TMP0]])
36+
; CHECK-NEXT: ret i32 [[SHL]]
37+
;
38+
entry:
39+
%x = load i32, ptr %p, align 4
40+
%shl = shl nsw i32 %x, 24
41+
%conv2 = and i32 %x, 255
42+
call void @use(i32 %conv2)
43+
ret i32 %shl
44+
}
45+
46+
define i32 @simplify_load_ext_keep_trunc_nuw(ptr %p) {
47+
; CHECK-LABEL: define i32 @simplify_load_ext_keep_trunc_nuw(
48+
; CHECK-SAME: ptr [[P:%.*]]) {
49+
; CHECK-NEXT: [[ENTRY:.*:]]
50+
; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[P]], align 4
51+
; CHECK-NEXT: [[TMP0:%.*]] = and i32 [[X]], 255
52+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i32 [[TMP0]] to i8
53+
; CHECK-NEXT: [[EXT1:%.*]] = sext i8 [[TRUNC]] to i16
54+
; CHECK-NEXT: call void @use(i32 [[TMP0]])
55+
; CHECK-NEXT: [[EXT2:%.*]] = zext i16 [[EXT1]] to i32
56+
; CHECK-NEXT: ret i32 [[EXT2]]
57+
;
58+
entry:
59+
%x = load i32, ptr %p, align 4
60+
%trunc = trunc nuw i32 %x to i8
61+
%ext1 = sext i8 %trunc to i16
62+
%conv2 = and i32 %x, 255
63+
call void @use(i32 %conv2)
64+
%ext2 = zext i16 %ext1 to i32
65+
ret i32 %ext2
66+
}
67+
68+
define i32 @simplify_load_ext_drop_shl_nuw(ptr %p) {
69+
; CHECK-LABEL: define i32 @simplify_load_ext_drop_shl_nuw(
70+
; CHECK-SAME: ptr [[P:%.*]]) {
71+
; CHECK-NEXT: [[ENTRY:.*:]]
72+
; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[P]], align 4
73+
; CHECK-NEXT: [[TMP0:%.*]] = and i32 [[X]], 255
74+
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[TMP0]], 24
75+
; CHECK-NEXT: call void @use(i32 [[TMP0]])
76+
; CHECK-NEXT: ret i32 [[SHL]]
77+
;
78+
entry:
79+
%x = load i32, ptr %p, align 4
80+
%shl = shl nuw i32 %x, 24
81+
%conv2 = and i32 %x, 255
82+
call void @use(i32 %conv2)
83+
ret i32 %shl
84+
}
85+
86+
declare void @use(i32)

0 commit comments

Comments
 (0)