mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[X86][FastISel] Support materializing floating-point constants for large code model & PIC
The following program miscompiles because rL216012 added static relocation model support but not for PIC. ``` // clang -fpic -mcmodel=large -O0 a.cc double foo() { return 42.0; } ``` This patch adds PIC support. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D86024
This commit is contained in:
parent
cba391237b
commit
1b73f40c27
@ -3793,7 +3793,7 @@ unsigned X86FastISel::X86MaterializeFP(const ConstantFP *CFP, MVT VT) {
|
||||
.addConstantPoolIndex(CPI, 0, OpFlag);
|
||||
MachineInstrBuilder MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc,
|
||||
TII.get(Opc), ResultReg);
|
||||
addDirectMem(MIB, AddrReg);
|
||||
addRegReg(MIB, AddrReg, false, PICBase, false);
|
||||
MachineMemOperand *MMO = FuncInfo.MF->getMachineMemOperand(
|
||||
MachinePointerInfo::getConstantPool(*FuncInfo.MF),
|
||||
MachineMemOperand::MOLoad, DL.getPointerSize(), Alignment);
|
||||
|
@ -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 @@ define float @constpool_float(float %x) {
|
||||
; 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@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
|
||||
|
Loading…
x
Reference in New Issue
Block a user