Skip to content

Commit 85fdea7

Browse files
committed
Address feedback.
- add mismatch test, move direct tests to the end of the file - nits
1 parent 2b6f033 commit 85fdea7

File tree

4 files changed

+201
-91
lines changed

4 files changed

+201
-91
lines changed

llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2659,7 +2659,7 @@ bool IRTranslator::translateCallBase(const CallBase &CB,
26592659
// Look through ptrauth constants to try to eliminate the matching bundle
26602660
// and turn this into a direct call with no ptrauth.
26612661
// CallLowering will use the raw pointer if it doesn't find the PAI.
2662-
auto *CalleeCPA = dyn_cast<ConstantPtrAuth>(CB.getCalledOperand());
2662+
const auto *CalleeCPA = dyn_cast<ConstantPtrAuth>(CB.getCalledOperand());
26632663
if (!CalleeCPA || !isa<Function>(CalleeCPA->getPointer()) ||
26642664
!CalleeCPA->isKnownCompatibleWith(Key, Discriminator, *DL)) {
26652665
// If we can't make it direct, package the bundle into PAI.

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9456,7 +9456,7 @@ void SelectionDAGBuilder::LowerCallSiteWithPtrAuthBundle(
94569456

94579457
// Look through ptrauth constants to find the raw callee.
94589458
// Do a direct unauthenticated call if we found it and everything matches.
9459-
if (auto *CalleeCPA = dyn_cast<ConstantPtrAuth>(CalleeV))
9459+
if (const auto *CalleeCPA = dyn_cast<ConstantPtrAuth>(CalleeV))
94609460
if (CalleeCPA->isKnownCompatibleWith(Key, Discriminator,
94619461
DAG.getDataLayout()))
94629462
return LowerCallTo(CB, getValue(CalleeCPA->getPointer()), CB.isTailCall(),

llvm/test/CodeGen/AArch64/ptrauth-call.ll

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -391,8 +391,6 @@ define i32 @test_direct_call_addr_blend_gep_different_index_types() #0 {
391391
ret i32 %tmp1
392392
}
393393

394-
attributes #0 = { nounwind }
395-
396394
@f.ref.ib.42.addr = external global ptr
397395
@f.ref.ib.0.addr = external global ptr
398396
@f_struct.ref.ib.0.addr = external global ptr

llvm/test/CodeGen/AArch64/ptrauth-invoke.ll

Lines changed: 199 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -96,90 +96,6 @@ continuebb:
9696
ret i32 %tmp0
9797
}
9898

99-
; DARWIN-LABEL: _test_invoke_ia_0_direct:
100-
; DARWIN-NEXT: [[FNBEGIN:L.*]]:
101-
; DARWIN-NEXT: .cfi_startproc
102-
; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v0
103-
; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]
104-
; DARWIN-NEXT: ; %bb.0:
105-
; DARWIN-NEXT: stp x20, x19, [sp, #-32]!
106-
; DARWIN-NEXT: stp x29, x30, [sp, #16]
107-
; DARWIN-NEXT: .cfi_def_cfa_offset 32
108-
; DARWIN-NEXT: .cfi_offset w30, -8
109-
; DARWIN-NEXT: .cfi_offset w29, -16
110-
; DARWIN-NEXT: .cfi_offset w19, -24
111-
; DARWIN-NEXT: .cfi_offset w20, -32
112-
; DARWIN-NEXT: [[PRECALL:L.*]]:
113-
; DARWIN-NEXT: bl _baz
114-
115-
; DARWIN-SDAG-NEXT: [[POSTCALL:L.*]]:
116-
; DARWIN-SDAG-NEXT: ; %bb.1:
117-
; DARWIN-SDAG-NEXT: mov x19, x0
118-
119-
; DARWIN-GISEL-NEXT: mov x19, x0
120-
; DARWIN-GISEL-NEXT: [[POSTCALL:L.*]]:
121-
122-
; DARWIN-NEXT: [[CALLBB:L.*]]:
123-
; DARWIN-NEXT: bl _foo
124-
; DARWIN-NEXT: mov x0, x19
125-
; DARWIN-NEXT: ldp x29, x30, [sp, #16]
126-
; DARWIN-NEXT: ldp x20, x19, [sp], #32
127-
; DARWIN-NEXT: ret
128-
; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:
129-
; DARWIN-NEXT: [[LPAD:L.*]]:
130-
; DARWIN-NEXT: mov w19, #-1
131-
; DARWIN-NEXT: b [[CALLBB]]
132-
133-
; ELF-LABEL: test_invoke_ia_0_direct:
134-
; ELF-NEXT: [[FNBEGIN:.L.*]]:
135-
; ELF-NEXT: .cfi_startproc
136-
; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v0
137-
; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]
138-
; ELF-NEXT: // %bb.0:
139-
; ELF-NEXT: stp x30, x19, [sp, #-16]!
140-
; ELF-NEXT: .cfi_def_cfa_offset 16
141-
; ELF-NEXT: .cfi_offset w19, -8
142-
; ELF-NEXT: .cfi_offset w30, -16
143-
; ELF-NEXT: [[PRECALL:.L.*]]:
144-
; ELF-NEXT: bl baz
145-
146-
; ELF-SDAG-NEXT: [[POSTCALL:.L.*]]:
147-
; ELF-SDAG-NEXT: // %bb.1:
148-
; ELF-SDAG-NEXT: mov w19, w0
149-
150-
; ELF-GISEL-NEXT: mov w19, w0
151-
; ELF-GISEL-NEXT: [[POSTCALL:.L.*]]:
152-
153-
; ELF-NEXT: [[CALLBB:.L.*]]:
154-
; ELF-NEXT: bl foo
155-
; ELF-NEXT: mov w0, w19
156-
; ELF-NEXT: ldp x30, x19, [sp], #16
157-
; ELF-NEXT: ret
158-
; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:
159-
; ELF-NEXT: [[LPAD:.L.*]]:
160-
; ELF-NEXT: mov w19, #-1
161-
; ELF-NEXT: b [[CALLBB]]
162-
163-
; CHECK-LABEL: GCC_except_table{{.*}}:
164-
; CHECK-NEXT: [[EXCEPT]]:
165-
; CHECK: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]
166-
; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]
167-
; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup
168-
169-
define i32 @test_invoke_ia_0_direct() #0 personality ptr @__gxx_personality_v0 {
170-
%tmp0 = invoke i32 ptrauth (ptr @baz, i32 0)() [ "ptrauth"(i32 0, i64 0) ] to label %continuebb
171-
unwind label %unwindbb
172-
173-
unwindbb:
174-
%tmp1 = landingpad { ptr, i32 } cleanup
175-
call void @foo()
176-
ret i32 -1
177-
178-
continuebb:
179-
call void @foo()
180-
ret i32 %tmp0
181-
}
182-
18399
@_ZTIPKc = external constant ptr
184100
@hello_str = private unnamed_addr constant [6 x i8] c"hello\00", align 1
185101

@@ -314,9 +230,6 @@ continuebb:
314230

315231
; CHECK-NEXT: [[TT]]:
316232

317-
; ELF-LABEL: .L_ZTIPKc.DW.stub:
318-
; ELF-NEXT: .xword _ZTIPKc
319-
320233
define void @test_invoke_ib_42_catch(ptr %fptr) #0 personality ptr @__gxx_personality_v0 {
321234
%tmp0 = call ptr @__cxa_allocate_exception(i64 8)
322235
store ptr getelementptr inbounds ([6 x i8], ptr @hello_str, i64 0, i64 0), ptr %tmp0, align 8
@@ -347,6 +260,205 @@ continuebb:
347260
unreachable
348261
}
349262

263+
; DARWIN-LABEL: _test_invoke_ia_0_direct:
264+
; DARWIN-NEXT: [[FNBEGIN:L.*]]:
265+
; DARWIN-NEXT: .cfi_startproc
266+
; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v0
267+
; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]
268+
; DARWIN-NEXT: ; %bb.0:
269+
; DARWIN-NEXT: stp x20, x19, [sp, #-32]!
270+
; DARWIN-NEXT: stp x29, x30, [sp, #16]
271+
; DARWIN-NEXT: .cfi_def_cfa_offset 32
272+
; DARWIN-NEXT: .cfi_offset w30, -8
273+
; DARWIN-NEXT: .cfi_offset w29, -16
274+
; DARWIN-NEXT: .cfi_offset w19, -24
275+
; DARWIN-NEXT: .cfi_offset w20, -32
276+
; DARWIN-NEXT: [[PRECALL:L.*]]:
277+
; DARWIN-NEXT: bl _baz
278+
279+
; DARWIN-SDAG-NEXT: [[POSTCALL:L.*]]:
280+
; DARWIN-SDAG-NEXT: ; %bb.1:
281+
; DARWIN-SDAG-NEXT: mov x19, x0
282+
283+
; DARWIN-GISEL-NEXT: mov x19, x0
284+
; DARWIN-GISEL-NEXT: [[POSTCALL:L.*]]:
285+
286+
; DARWIN-NEXT: [[CALLBB:L.*]]:
287+
; DARWIN-NEXT: bl _foo
288+
; DARWIN-NEXT: mov x0, x19
289+
; DARWIN-NEXT: ldp x29, x30, [sp, #16]
290+
; DARWIN-NEXT: ldp x20, x19, [sp], #32
291+
; DARWIN-NEXT: ret
292+
; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:
293+
; DARWIN-NEXT: [[LPAD:L.*]]:
294+
; DARWIN-NEXT: mov w19, #-1
295+
; DARWIN-NEXT: b [[CALLBB]]
296+
297+
; ELF-LABEL: test_invoke_ia_0_direct:
298+
; ELF-NEXT: [[FNBEGIN:.L.*]]:
299+
; ELF-NEXT: .cfi_startproc
300+
; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v0
301+
; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]
302+
; ELF-NEXT: // %bb.0:
303+
; ELF-NEXT: stp x30, x19, [sp, #-16]!
304+
; ELF-NEXT: .cfi_def_cfa_offset 16
305+
; ELF-NEXT: .cfi_offset w19, -8
306+
; ELF-NEXT: .cfi_offset w30, -16
307+
; ELF-NEXT: [[PRECALL:.L.*]]:
308+
; ELF-NEXT: bl baz
309+
310+
; ELF-SDAG-NEXT: [[POSTCALL:.L.*]]:
311+
; ELF-SDAG-NEXT: // %bb.1:
312+
; ELF-SDAG-NEXT: mov w19, w0
313+
314+
; ELF-GISEL-NEXT: mov w19, w0
315+
; ELF-GISEL-NEXT: [[POSTCALL:.L.*]]:
316+
317+
; ELF-NEXT: [[CALLBB:.L.*]]:
318+
; ELF-NEXT: bl foo
319+
; ELF-NEXT: mov w0, w19
320+
; ELF-NEXT: ldp x30, x19, [sp], #16
321+
; ELF-NEXT: ret
322+
; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:
323+
; ELF-NEXT: [[LPAD:.L.*]]:
324+
; ELF-NEXT: mov w19, #-1
325+
; ELF-NEXT: b [[CALLBB]]
326+
327+
; CHECK-LABEL: GCC_except_table{{.*}}:
328+
; CHECK-NEXT: [[EXCEPT]]:
329+
; CHECK: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]
330+
; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]
331+
; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup
332+
333+
define i32 @test_invoke_ia_0_direct() #0 personality ptr @__gxx_personality_v0 {
334+
%tmp0 = invoke i32 ptrauth (ptr @baz, i32 0)() [ "ptrauth"(i32 0, i64 0) ] to label %continuebb
335+
unwind label %unwindbb
336+
337+
unwindbb:
338+
%tmp1 = landingpad { ptr, i32 } cleanup
339+
call void @foo()
340+
ret i32 -1
341+
342+
continuebb:
343+
call void @foo()
344+
ret i32 %tmp0
345+
}
346+
347+
; DARWIN-LABEL: _test_invoke_ib_2_direct_mismatch:
348+
; DARWIN-NEXT: [[FNBEGIN:L.*]]:
349+
; DARWIN-NEXT: .cfi_startproc
350+
; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v0
351+
; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]
352+
; DARWIN-NEXT: ; %bb.0:
353+
; DARWIN-NEXT: stp x20, x19, [sp, #-32]!
354+
; DARWIN-NEXT: stp x29, x30, [sp, #16]
355+
; DARWIN-NEXT: .cfi_def_cfa_offset 32
356+
; DARWIN-NEXT: .cfi_offset w30, -8
357+
; DARWIN-NEXT: .cfi_offset w29, -16
358+
; DARWIN-NEXT: .cfi_offset w19, -24
359+
; DARWIN-NEXT: .cfi_offset w20, -32
360+
361+
; DARWIN-SDAG-NEXT: [[PRECALL:L.*]]:
362+
; DARWIN-SDAG-NEXT: adrp x16, _baz@GOTPAGE
363+
; DARWIN-SDAG-NEXT: ldr x16, [x16, _baz@GOTPAGEOFF]
364+
; DARWIN-SDAG-NEXT: mov x17, #1234
365+
; DARWIN-SDAG-NEXT: pacia x16, x17
366+
; DARWIN-SDAG-NEXT: mov x8, x16
367+
; DARWIN-SDAG-NEXT: mov x17, #2
368+
; DARWIN-SDAG-NEXT: blrab x8, x17
369+
; DARWIN-SDAG-NEXT: [[POSTCALL:L.*]]:
370+
; DARWIN-SDAG-NEXT: ; %bb.1:
371+
; DARWIN-SDAG-NEXT: mov x19, x0
372+
373+
; DARWIN-GISEL-NEXT: adrp x16, _baz@GOTPAGE
374+
; DARWIN-GISEL-NEXT: ldr x16, [x16, _baz@GOTPAGEOFF]
375+
; DARWIN-GISEL-NEXT: mov x17, #1234
376+
; DARWIN-GISEL-NEXT: pacia x16, x17
377+
; DARWIN-GISEL-NEXT: mov x8, x16
378+
; DARWIN-GISEL-NEXT: [[PRECALL:L.*]]:
379+
; DARWIN-GISEL-NEXT: mov x17, #2
380+
; DARWIN-GISEL-NEXT: blrab x8, x17
381+
; DARWIN-GISEL-NEXT: mov x19, x0
382+
; DARWIN-GISEL-NEXT: [[POSTCALL:L.*]]:
383+
384+
; DARWIN-NEXT: [[CALLBB:L.*]]:
385+
; DARWIN-NEXT: bl _foo
386+
; DARWIN-NEXT: mov x0, x19
387+
; DARWIN-NEXT: ldp x29, x30, [sp, #16]
388+
; DARWIN-NEXT: ldp x20, x19, [sp], #32
389+
; DARWIN-NEXT: ret
390+
; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:
391+
; DARWIN-NEXT: [[LPAD:L.*]]:
392+
; DARWIN-NEXT: mov w19, #-1
393+
; DARWIN-NEXT: b [[CALLBB]]
394+
395+
; ELF-LABEL: test_invoke_ib_2_direct_mismatch:
396+
; ELF-NEXT: [[FNBEGIN:.L.*]]:
397+
; ELF-NEXT: .cfi_startproc
398+
; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v0
399+
; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]
400+
; ELF-NEXT: // %bb.0:
401+
; ELF-NEXT: stp x30, x19, [sp, #-16]!
402+
; ELF-NEXT: .cfi_def_cfa_offset 16
403+
; ELF-NEXT: .cfi_offset w19, -8
404+
; ELF-NEXT: .cfi_offset w30, -16
405+
406+
; ELF-SDAG-NEXT: [[PRECALL:.L.*]]:
407+
; ELF-SDAG-NEXT: adrp x16, :got:baz
408+
; ELF-SDAG-NEXT: ldr x16, [x16, :got_lo12:baz]
409+
; ELF-SDAG-NEXT: mov x17, #1234
410+
; ELF-SDAG-NEXT: pacia x16, x17
411+
; ELF-SDAG-NEXT: mov x8, x16
412+
; ELF-SDAG-NEXT: mov x17, #2
413+
; ELF-SDAG-NEXT: blrab x8, x17
414+
; ELF-SDAG-NEXT: [[POSTCALL:.L.*]]:
415+
; ELF-SDAG-NEXT: // %bb.1:
416+
; ELF-SDAG-NEXT: mov w19, w0
417+
418+
; ELF-GISEL-NEXT: adrp x16, :got:baz
419+
; ELF-GISEL-NEXT: ldr x16, [x16, :got_lo12:baz]
420+
; ELF-GISEL-NEXT: mov x17, #1234
421+
; ELF-GISEL-NEXT: pacia x16, x17
422+
; ELF-GISEL-NEXT: mov x8, x16
423+
; ELF-GISEL-NEXT: [[PRECALL:.L.*]]:
424+
; ELF-GISEL-NEXT: mov x17, #2
425+
; ELF-GISEL-NEXT: blrab x8, x17
426+
; ELF-GISEL-NEXT: mov w19, w0
427+
; ELF-GISEL-NEXT: [[POSTCALL:.L.*]]:
428+
429+
; ELF-NEXT: [[CALLBB:.L.*]]:
430+
; ELF-NEXT: bl foo
431+
; ELF-NEXT: mov w0, w19
432+
; ELF-NEXT: ldp x30, x19, [sp], #16
433+
; ELF-NEXT: ret
434+
; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:
435+
; ELF-NEXT: [[LPAD:.L.*]]:
436+
; ELF-NEXT: mov w19, #-1
437+
; ELF-NEXT: b [[CALLBB]]
438+
439+
; CHECK-LABEL: GCC_except_table{{.*}}:
440+
; CHECK-NEXT: [[EXCEPT]]:
441+
; CHECK: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]
442+
; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]
443+
; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup
444+
445+
define i32 @test_invoke_ib_2_direct_mismatch() #0 personality ptr @__gxx_personality_v0 {
446+
%tmp0 = invoke i32 ptrauth (ptr @baz, i32 0, i64 1234)() [ "ptrauth"(i32 1, i64 2) ] to label %continuebb
447+
unwind label %unwindbb
448+
449+
unwindbb:
450+
%tmp1 = landingpad { ptr, i32 } cleanup
451+
call void @foo()
452+
ret i32 -1
453+
454+
continuebb:
455+
call void @foo()
456+
ret i32 %tmp0
457+
}
458+
459+
; ELF-LABEL: .L_ZTIPKc.DW.stub:
460+
; ELF-NEXT: .xword _ZTIPKc
461+
350462
declare void @foo()
351463
declare void @bar(ptr)
352464
declare i32 @baz()

0 commit comments

Comments
 (0)