Skip to content

Commit 469922f

Browse files
authored
[X86] Don't emit ENDBR for asm goto branch targets (#143439)
Similarly to #141562, which disabled BTI generation for ARM asm goto branch targets, drop unnecessary ENDBRs from IsInlineAsmBrIndirectTarget machine basic blocks.
1 parent 117e78f commit 469922f

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

llvm/lib/Target/X86/X86IndirectBranchTracking.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ bool X86IndirectBranchTrackingPass::runOnMachineFunction(MachineFunction &MF) {
147147
for (auto &MBB : MF) {
148148
// Find all basic blocks that their address was taken (for example
149149
// in the case of indirect jump) and add ENDBR instruction.
150-
if (MBB.hasAddressTaken())
150+
if (MBB.isMachineBlockAddressTaken() || MBB.isIRBlockAddressTaken())
151151
Changed |= addENDBR(MBB, MBB.begin());
152152

153153
for (MachineBasicBlock::iterator I = MBB.begin(); I != MBB.end(); ++I) {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
3+
4+
define i32 @test1(i32 %a) {
5+
; CHECK-LABEL: test1:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: endbr64
8+
; CHECK-NEXT: addl $4, %edi
9+
; CHECK-NEXT: #APP
10+
; CHECK-NEXT: xorl %edi, %edi
11+
; CHECK-NEXT: jmp .LBB0_2
12+
; CHECK-NEXT: #NO_APP
13+
; CHECK-NEXT: # %bb.1: # %normal
14+
; CHECK-NEXT: xorl %eax, %eax
15+
; CHECK-NEXT: retq
16+
; CHECK-NEXT: .LBB0_2: # Inline asm indirect target
17+
; CHECK-NEXT: # %fail
18+
; CHECK-NEXT: # Label of block must be emitted
19+
; CHECK-NEXT: movl $1, %eax
20+
; CHECK-NEXT: retq
21+
entry:
22+
%0 = add i32 %a, 4
23+
callbr void asm "xorl $0, $0; jmp ${1:l}", "r,!i,~{dirflag},~{fpsr},~{flags}"(i32 %0) to label %normal [label %fail]
24+
25+
normal:
26+
ret i32 0
27+
28+
fail:
29+
ret i32 1
30+
}
31+
32+
!llvm.module.flags = !{!0}
33+
34+
!0 = !{i32 8, !"cf-protection-branch", i32 1}

0 commit comments

Comments
 (0)