[PATCH] D86024: [X86][FastISel] Support materializing floating-point constants for large code model & PIC
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 15 14:26:41 PDT 2020
MaskRay created this revision.
MaskRay added reviewers: craig.topper, ributzka.
Herald added subscribers: llvm-commits, dexonsmith, hiraditya.
Herald added a project: LLVM.
MaskRay requested review of this revision.
The following program will compile incorrectly because rL216012 <https://reviews.llvm.org/rL216012> added
static relocation model support but not PIC.
// clang -fpic -mcmodel=large a.cc
double foo() { return 42.0; }
This patch adds PIC support.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D86024
Files:
llvm/lib/Target/X86/X86FastISel.cpp
llvm/test/CodeGen/X86/fast-isel-constpool.ll
Index: llvm/test/CodeGen/X86/fast-isel-constpool.ll
===================================================================
--- llvm/test/CodeGen/X86/fast-isel-constpool.ll
+++ llvm/test/CodeGen/X86/fast-isel-constpool.ll
@@ -1,6 +1,7 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=x86_64-apple-darwin -fast-isel -code-model=small < %s | FileCheck %s
; RUN: llc -mtriple=x86_64-apple-darwin -fast-isel -code-model=large < %s | FileCheck %s --check-prefix=LARGE
+; RUN: llc -mtriple=x86_64 -fast-isel -code-model=large -relocation-model=pic < %s | FileCheck %s --check-prefix=LARGE_PIC
; RUN: llc -mtriple=x86_64-apple-darwin -fast-isel -code-model=small -mattr=avx < %s | FileCheck %s --check-prefix=AVX
; RUN: llc -mtriple=x86_64-apple-darwin -fast-isel -code-model=large -mattr=avx < %s | FileCheck %s --check-prefix=LARGE_AVX
; RUN: llc -mtriple=x86_64-apple-darwin -fast-isel -code-model=small -mattr=avx512f < %s | FileCheck %s --check-prefix=AVX
@@ -25,6 +26,16 @@
; LARGE-NEXT: addss (%rax), %xmm0
; LARGE-NEXT: retq
;
+; LARGE_PIC-LABEL: constpool_float:
+; LARGE_PIC: # %bb.0:
+; LARGE_PIC-NEXT: .L0$pb:
+; LARGE_PIC-NEXT: leaq .L0$pb(%rip), %rax
+; LARGE_PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L0$pb, %rcx
+; LARGE_PIC-NEXT: addq %rax, %rcx
+; LARGE_PIC-NEXT: movabsq $.LCPI0_0 at GOTOFF, %rax
+; LARGE_PIC-NEXT: addss (%rax,%rcx), %xmm0
+; LARGE_PIC-NEXT: retq
+;
; AVX-LABEL: constpool_float:
; AVX: ## %bb.0:
; AVX-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
Index: llvm/lib/Target/X86/X86FastISel.cpp
===================================================================
--- llvm/lib/Target/X86/X86FastISel.cpp
+++ llvm/lib/Target/X86/X86FastISel.cpp
@@ -3793,7 +3793,10 @@
.addConstantPoolIndex(CPI, 0, OpFlag);
MachineInstrBuilder MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc,
TII.get(Opc), ResultReg);
- addDirectMem(MIB, AddrReg);
+ if (TM.getRelocationModel() == Reloc::Static)
+ addDirectMem(MIB, AddrReg);
+ else
+ addRegReg(MIB, AddrReg, false, PICBase, false);
MachineMemOperand *MMO = FuncInfo.MF->getMachineMemOperand(
MachinePointerInfo::getConstantPool(*FuncInfo.MF),
MachineMemOperand::MOLoad, DL.getPointerSize(), Alignment);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D86024.285860.patch
Type: text/x-patch
Size: 2365 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200815/877aa101/attachment.bin>
More information about the llvm-commits
mailing list