[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 15:00:07 PDT 2020
MaskRay updated this revision to Diff 285865.
MaskRay added a comment.
Simplify (PICBase may be 0 -> degenerates to addDirectMem)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D86024/new/
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,7 @@
.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);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D86024.285865.patch
Type: text/x-patch
Size: 2266 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200815/a15bdbb6/attachment.bin>
More information about the llvm-commits
mailing list