Skip to content

Commit fd91a96

Browse files
committed
Add/update InstCombine test cases
1 parent db0fb12 commit fd91a96

File tree

2 files changed

+68
-10
lines changed

2 files changed

+68
-10
lines changed

llvm/test/Transforms/InstCombine/ptrauth-intrinsics-call.ll

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,21 @@ define i32 @test_ptrauth_call_resign_blend_2(ptr %pp) {
6868
ret i32 %v6
6969
}
7070

71+
define i32 @test_ptrauth_call_resign_long_bundle_ops(ptr %pp) {
72+
; CHECK-LABEL: @test_ptrauth_call_resign_long_bundle_ops(
73+
; CHECK-NEXT: [[V01:%.*]] = load ptr, ptr [[PP:%.*]], align 8
74+
; CHECK-NEXT: [[V6:%.*]] = call i32 [[V01]]() [ "ptrauth"(i64 1, i64 1234) ]
75+
; CHECK-NEXT: ret i32 [[V6]]
76+
;
77+
%v0 = load ptr, ptr %pp, align 8
78+
%v1 = ptrtoint ptr %pp to i64
79+
%v2 = ptrtoint ptr %v0 to i64
80+
%v4 = call i64 @llvm.ptrauth.resign(i64 %v2) [ "ptrauth"(i64 1, i64 1234), "ptrauth"(i64 1, i64 %v1, i64 5678, i64 %v2, i64 123) ]
81+
%v5 = inttoptr i64 %v4 to ptr
82+
%v6 = call i32 %v5() [ "ptrauth"(i64 1, i64 %v1, i64 5678, i64 %v2, i64 123) ]
83+
ret i32 %v6
84+
}
85+
7186
define i32 @test_ptrauth_call_resign_mismatch_key(ptr %p) {
7287
; CHECK-LABEL: @test_ptrauth_call_resign_mismatch_key(
7388
; CHECK-NEXT: [[V0:%.*]] = ptrtoint ptr [[P:%.*]] to i64
@@ -117,6 +132,25 @@ define i32 @test_ptrauth_call_resign_mismatch_blend(ptr %pp) {
117132
ret i32 %v6
118133
}
119134

135+
define i32 @test_ptrauth_call_resign_long_bundle_ops_mismatch(ptr %pp) {
136+
; CHECK-LABEL: @test_ptrauth_call_resign_long_bundle_ops_mismatch(
137+
; CHECK-NEXT: [[V0:%.*]] = load ptr, ptr [[PP:%.*]], align 8
138+
; CHECK-NEXT: [[V1:%.*]] = ptrtoint ptr [[PP]] to i64
139+
; CHECK-NEXT: [[V2:%.*]] = ptrtoint ptr [[V0]] to i64
140+
; CHECK-NEXT: [[V4:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[V2]]) [ "ptrauth"(i64 1, i64 1234), "ptrauth"(i64 1, i64 [[V1]], i64 5678, i64 [[V1]], i64 123) ]
141+
; CHECK-NEXT: [[V5:%.*]] = inttoptr i64 [[V4]] to ptr
142+
; CHECK-NEXT: [[V3:%.*]] = call i32 [[V5]]() [ "ptrauth"(i64 1, i64 [[V1]], i64 [[V2]], i64 123) ]
143+
; CHECK-NEXT: ret i32 [[V3]]
144+
;
145+
%v0 = load ptr, ptr %pp, align 8
146+
%v1 = ptrtoint ptr %pp to i64
147+
%v2 = ptrtoint ptr %v0 to i64
148+
%v4 = call i64 @llvm.ptrauth.resign(i64 %v2) [ "ptrauth"(i64 1, i64 1234), "ptrauth"(i64 1, i64 %v1, i64 5678, i64 %v1, i64 123) ]
149+
%v5 = inttoptr i64 %v4 to ptr
150+
%v6 = call i32 %v5() [ "ptrauth"(i64 1, i64 %v1, i64 %v2, i64 123) ]
151+
ret i32 %v6
152+
}
153+
120154
define i32 @test_ptrauth_call_resign_changing_call_key(ptr %p) {
121155
; CHECK-LABEL: @test_ptrauth_call_resign_changing_call_key(
122156
; CHECK-NEXT: [[V3:%.*]] = call i32 [[P:%.*]]() [ "ptrauth"(i64 2, i64 1234) ]

llvm/test/Transforms/InstCombine/ptrauth-intrinsics.ll

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,17 @@ define i64 @test_ptrauth_nop(ptr %p) {
1212
ret i64 %authed
1313
}
1414

15+
define i64 @test_ptrauth_nop_long_bundle_ops(ptr %p) {
16+
; CHECK-LABEL: @test_ptrauth_nop_long_bundle_ops(
17+
; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[P:%.*]] to i64
18+
; CHECK-NEXT: ret i64 [[TMP0]]
19+
;
20+
%tmp0 = ptrtoint ptr %p to i64
21+
%signed = call i64 @llvm.ptrauth.sign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 %tmp0) ]
22+
%authed = call i64 @llvm.ptrauth.auth(i64 %signed) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 %tmp0) ]
23+
ret i64 %authed
24+
}
25+
1526
declare void @foo()
1627
declare void @bar()
1728

@@ -58,15 +69,28 @@ define i64 @test_ptrauth_nop_mismatch_keys(ptr %p) {
5869
ret i64 %authed
5970
}
6071

72+
define i64 @test_ptrauth_nop_long_bundle_ops_mismatch(ptr %p) {
73+
; CHECK-LABEL: @test_ptrauth_nop_long_bundle_ops_mismatch(
74+
; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[P:%.*]] to i64
75+
; CHECK-NEXT: [[SIGNED:%.*]] = call i64 @llvm.ptrauth.sign(i64 [[TMP0]]) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 [[TMP0]]) ]
76+
; CHECK-NEXT: [[AUTHED:%.*]] = call i64 @llvm.ptrauth.auth(i64 [[SIGNED]]) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 123) ]
77+
; CHECK-NEXT: ret i64 [[AUTHED]]
78+
;
79+
%tmp0 = ptrtoint ptr %p to i64
80+
%signed = call i64 @llvm.ptrauth.sign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 %tmp0) ]
81+
%authed = call i64 @llvm.ptrauth.auth(i64 %signed) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 123) ]
82+
ret i64 %authed
83+
}
84+
6185
define i64 @test_ptrauth_sign_resign(ptr %p) {
6286
; CHECK-LABEL: @test_ptrauth_sign_resign(
6387
; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[P:%.*]] to i64
6488
; CHECK-NEXT: [[AUTHED:%.*]] = call i64 @llvm.ptrauth.sign(i64 [[TMP0]]) [ "ptrauth"(i64 0, i64 42, i64 0) ]
6589
; CHECK-NEXT: ret i64 [[AUTHED]]
6690
;
6791
%tmp0 = ptrtoint ptr %p to i64
68-
%signed = call i64 @llvm.ptrauth.sign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0) ]
69-
%authed = call i64 @llvm.ptrauth.resign(i64 %signed) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 42, i64 0) ]
92+
%signed = call i64 @llvm.ptrauth.sign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 %tmp0) ]
93+
%authed = call i64 @llvm.ptrauth.resign(i64 %signed) [ "ptrauth"(i64 1, i64 1234, i64 0, i64 42, i64 %tmp0), "ptrauth"(i64 0, i64 42, i64 0) ]
7094
ret i64 %authed
7195
}
7296

@@ -77,8 +101,8 @@ define i64 @test_ptrauth_resign_resign(ptr %p) {
77101
; CHECK-NEXT: ret i64 [[AUTHED]]
78102
;
79103
%tmp0 = ptrtoint ptr %p to i64
80-
%signed = call i64 @llvm.ptrauth.resign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 42, i64 0) ]
81-
%authed = call i64 @llvm.ptrauth.resign(i64 %signed) [ "ptrauth"(i64 0, i64 42, i64 0), "ptrauth"(i64 1, i64 3141, i64 0) ]
104+
%signed = call i64 @llvm.ptrauth.resign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 42, i64 0, i64 42, i64 %tmp0) ]
105+
%authed = call i64 @llvm.ptrauth.resign(i64 %signed) [ "ptrauth"(i64 0, i64 42, i64 0, i64 42, i64 %tmp0), "ptrauth"(i64 1, i64 3141, i64 0) ]
82106
ret i64 %authed
83107
}
84108

@@ -89,21 +113,21 @@ define i64 @test_ptrauth_resign_auth(ptr %p) {
89113
; CHECK-NEXT: ret i64 [[AUTHED]]
90114
;
91115
%tmp0 = ptrtoint ptr %p to i64
92-
%signed = call i64 @llvm.ptrauth.resign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 42, i64 0) ]
93-
%authed = call i64 @llvm.ptrauth.auth(i64 %signed) [ "ptrauth"(i64 0, i64 42, i64 0) ]
116+
%signed = call i64 @llvm.ptrauth.resign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 42, i64 0, i64 42, i64 %tmp0) ]
117+
%authed = call i64 @llvm.ptrauth.auth(i64 %signed) [ "ptrauth"(i64 0, i64 42, i64 0, i64 42, i64 %tmp0) ]
94118
ret i64 %authed
95119
}
96120

97121
define i64 @test_ptrauth_resign_auth_mismatch(ptr %p) {
98122
; CHECK-LABEL: @test_ptrauth_resign_auth_mismatch(
99123
; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[P:%.*]] to i64
100-
; CHECK-NEXT: [[SIGNED:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[TMP0]]) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 10, i64 0) ]
101-
; CHECK-NEXT: [[AUTHED:%.*]] = call i64 @llvm.ptrauth.auth(i64 [[SIGNED]]) [ "ptrauth"(i64 0, i64 42, i64 0) ]
124+
; CHECK-NEXT: [[SIGNED:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[TMP0]]) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 10, i64 0, i64 42, i64 [[TMP0]]) ]
125+
; CHECK-NEXT: [[AUTHED:%.*]] = call i64 @llvm.ptrauth.auth(i64 [[SIGNED]]) [ "ptrauth"(i64 0, i64 42, i64 0, i64 123, i64 [[TMP0]]) ]
102126
; CHECK-NEXT: ret i64 [[AUTHED]]
103127
;
104128
%tmp0 = ptrtoint ptr %p to i64
105-
%signed = call i64 @llvm.ptrauth.resign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 10, i64 0) ]
106-
%authed = call i64 @llvm.ptrauth.auth(i64 %signed) [ "ptrauth"(i64 0, i64 42, i64 0) ]
129+
%signed = call i64 @llvm.ptrauth.resign(i64 %tmp0) [ "ptrauth"(i64 1, i64 1234, i64 0), "ptrauth"(i64 0, i64 10, i64 0, i64 42, i64 %tmp0) ]
130+
%authed = call i64 @llvm.ptrauth.auth(i64 %signed) [ "ptrauth"(i64 0, i64 42, i64 0, i64 123, i64 %tmp0) ]
107131
ret i64 %authed
108132
}
109133

0 commit comments

Comments
 (0)