aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2022-02-17 21:49:39 +0000
committerDimitry Andric <dim@FreeBSD.org>2022-05-14 11:45:37 +0000
commit8885dff6cec52378084211fdd9366a73833eceee (patch)
treeaa502d5323bbb5d646ebd0f8aec0ee387c0dd0b0
parent1838bd0f4839006b42d41a02a787b7f578655223 (diff)
downloadsrc-8885dff6cec52378084211fdd9366a73833eceee.tar.gz
src-8885dff6cec52378084211fdd9366a73833eceee.zip
Apply fix for asm constraint error in www/php80-opcache
Merge commit 027c16bef4b7 from llvm git (by Nick Desaulniers): [X86ISelLowering] permit BlockAddressSDNode "i" constraints for PIC When building 32b x86 code as PIC, the existing handling of "i" constraints is conservative since generally we have to go through the GOT to find references to functions. But generally, BlockAddresses from C code refer to the Function in the current TU. Permit BlockAddresses to be used with the "i" constraint for those cases. I regressed this in commit 4edb9983cb8c ("[SelectionDAG] treat X constrained labels as i for asm") Fixes: https://github.com/llvm/llvm-project/issues/53868 Reviewed By: efriedma, MaskRay Differential Revision: https://reviews.llvm.org/D119905
-rw-r--r--contrib/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp b/contrib/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp
index 90753b5b4d33..824ea7bbc843 100644
--- a/contrib/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/contrib/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -54617,8 +54617,9 @@ void X86TargetLowering::LowerAsmOperandForConstraint(SDValue Op,
// In any sort of PIC mode addresses need to be computed at runtime by
// adding in a register or some sort of table lookup. These can't
- // be used as immediates.
- if (Subtarget.isPICStyleGOT() || Subtarget.isPICStyleStubPIC())
+ // be used as immediates. BlockAddresses are fine though.
+ if ((Subtarget.isPICStyleGOT() || Subtarget.isPICStyleStubPIC()) &&
+ !isa<BlockAddressSDNode>(Op))
return;
// If we are in non-pic codegen mode, we allow the address of a global (with