[PATCH] D57277: [COFF, ARM64] Don't put jump table into a separate COFF section for EK_LabelDifference32
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 29 01:39:24 PST 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL352465: [COFF, ARM64] Don't put jump table into a separate COFF section for… (authored by mstorsjo, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D57277?vs=183989&id=184036#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D57277/new/
https://reviews.llvm.org/D57277
Files:
llvm/trunk/lib/Target/AArch64/AArch64AsmPrinter.cpp
llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp
llvm/trunk/test/CodeGen/AArch64/win64-jumptable.ll
Index: llvm/trunk/test/CodeGen/AArch64/win64-jumptable.ll
===================================================================
--- llvm/trunk/test/CodeGen/AArch64/win64-jumptable.ll
+++ llvm/trunk/test/CodeGen/AArch64/win64-jumptable.ll
@@ -0,0 +1,48 @@
+; RUN: llc -o - %s -mtriple=aarch64-windows -aarch64-enable-compress-jump-tables=0 | FileCheck %s
+
+define void @f(i32 %x) {
+entry:
+ switch i32 %x, label %sw.epilog [
+ i32 0, label %sw.bb
+ i32 1, label %sw.bb1
+ i32 2, label %sw.bb2
+ i32 3, label %sw.bb3
+ ]
+
+sw.bb: ; preds = %entry
+ tail call void @g(i32 0) #2
+ br label %sw.epilog
+
+sw.bb1: ; preds = %entry
+ tail call void @g(i32 1) #2
+ br label %sw.epilog
+
+sw.bb2: ; preds = %entry
+ tail call void @g(i32 2) #2
+ br label %sw.epilog
+
+sw.bb3: ; preds = %entry
+ tail call void @g(i32 3) #2
+ br label %sw.epilog
+
+sw.epilog: ; preds = %entry, %sw.bb3, %sw.bb2, %sw.bb1, %sw.bb
+ tail call void @g(i32 10) #2
+ ret void
+}
+
+declare void @g(i32)
+
+; CHECK: .text
+; CHECK: f:
+; CHECK: .seh_proc f
+; CHECK: b g
+; CHECK-NEXT: .p2align 2
+; CHECK-NEXT: .LJTI0_0:
+; CHECK: .word .LBB0_2-.LJTI0_0
+; CHECK: .word .LBB0_3-.LJTI0_0
+; CHECK: .word .LBB0_4-.LJTI0_0
+; CHECK: .word .LBB0_5-.LJTI0_0
+; CHECK: .section .xdata,"dr"
+; CHECK: .seh_handlerdata
+; CHECK: .text
+; CHECK: .seh_endproc
Index: llvm/trunk/lib/Target/AArch64/AArch64AsmPrinter.cpp
===================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64AsmPrinter.cpp
+++ llvm/trunk/lib/Target/AArch64/AArch64AsmPrinter.cpp
@@ -578,9 +578,18 @@
const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables();
if (JT.empty()) return;
+ const Function &F = MF->getFunction();
const TargetLoweringObjectFile &TLOF = getObjFileLowering();
- MCSection *ReadOnlySec = TLOF.getSectionForJumpTable(MF->getFunction(), TM);
- OutStreamer->SwitchSection(ReadOnlySec);
+ bool JTInDiffSection =
+ !STI->isTargetCOFF() ||
+ !TLOF.shouldPutJumpTableInFunctionSection(
+ MJTI->getEntryKind() == MachineJumpTableInfo::EK_LabelDifference32,
+ F);
+ if (JTInDiffSection) {
+ // Drop it in the readonly section.
+ MCSection *ReadOnlySec = TLOF.getSectionForJumpTable(F, TM);
+ OutStreamer->SwitchSection(ReadOnlySec);
+ }
auto AFI = MF->getInfo<AArch64FunctionInfo>();
for (unsigned JTI = 0, e = JT.size(); JTI != e; ++JTI) {
Index: llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp
===================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp
+++ llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp
@@ -208,8 +208,8 @@
static Reloc::Model getEffectiveRelocModel(const Triple &TT,
Optional<Reloc::Model> RM) {
- // AArch64 Darwin is always PIC.
- if (TT.isOSDarwin())
+ // AArch64 Darwin and Windows are always PIC.
+ if (TT.isOSDarwin() || TT.isOSWindows())
return Reloc::PIC_;
// On ELF platforms the default static relocation model has a smart enough
// linker to cope with referencing external symbols defined in a shared
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57277.184036.patch
Type: text/x-patch
Size: 3395 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190129/9218ba8d/attachment.bin>
More information about the llvm-commits
mailing list