Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion llvm/lib/Target/X86/X86FixupLEAs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,8 @@ static inline bool hasInefficientLEABaseReg(const MachineOperand &Base,
}

static inline bool hasLEAOffset(const MachineOperand &Offset) {
return (Offset.isImm() && Offset.getImm() != 0) || Offset.isGlobal();
return (Offset.isImm() && Offset.getImm() != 0) || Offset.isGlobal() ||
Offset.isBlockAddress();
}

static inline unsigned getADDrrFromLEA(unsigned LEAOpcode) {
Expand Down
30 changes: 30 additions & 0 deletions llvm/test/CodeGen/X86/lea-fixup-blockaddress.mir
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
# RUN: llc -mtriple=i386-unknown-linux-gnu -mattr=slow-3ops-lea -run-pass x86-fixup-LEAs -o - %s | FileCheck %s

--- |
define i32 @square(i32 %0) local_unnamed_addr {
Comment thread
momo5502 marked this conversation as resolved.
%blub = getelementptr i8, ptr blockaddress(@square, %2), i32 %0
indirectbr ptr %blub, [label %2]

2:
ret i32 0
}

---
name: square
body: |
; CHECK-LABEL: name: square
; CHECK: bb.0:
; CHECK-NEXT: renamable $eax = LEA32r renamable $ebx, 1, renamable $ebp, 0, $noreg
; CHECK-NEXT: $eax = ADD32ri $eax, target-flags(x86-gotoff) blockaddress(@square, %ir-block.1), implicit-def $eflags
; CHECK-NEXT: JMP32r killed renamable $eax
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.1 (%ir-block.1, ir-block-address-taken %ir-block.1):
; CHECK-NEXT: RET 0
bb.0:
renamable $eax = LEA32r renamable $ebp, 1, renamable $ebx, target-flags(x86-gotoff) blockaddress(@square, %ir-block.1), $noreg
JMP32r killed renamable $eax

bb.1 (%ir-block.1, ir-block-address-taken %ir-block.1):
RET 0
...