diff options
author | Evgenii Stepanov <eugenis@google.com> | 2020-01-08 14:33:28 -0800 |
---|---|---|
committer | Evgenii Stepanov <eugenis@google.com> | 2020-01-08 14:36:12 -0800 |
commit | 58deb20dd2dfbfbfff8097ce80137d12a57a3607 (patch) | |
tree | 0151a61e0895207a3c80f07535bc04f022502f67 /llvm/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp | |
parent | 28b9cdd26073c79be36c79476a9bacceca3d116f (diff) | |
download | bcm5719-llvm-58deb20dd2dfbfbfff8097ce80137d12a57a3607.tar.gz bcm5719-llvm-58deb20dd2dfbfbfff8097ce80137d12a57a3607.zip |
Revert "Merge memtag instructions with adjacent stack slots."
*** Bad machine code: Tied use must be a register ***
- function: stg_alloca17
- basic block: %bb.0 entry (0x20076710580)
- instruction: early-clobber %0:gpr64common, early-clobber %1:gpr64sp = STGloop 272, %stack.0.a :: (store 272 into %ir.a, align 16)
- operand 3: %stack.0.a
http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/21481/steps/test-check-all/logs/stdio
This reverts commit b675a7628ce6a21b1e4a71c079a67badfb8b073d.
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp b/llvm/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp index e050a0028ec..ba61ed726e8 100644 --- a/llvm/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp @@ -125,13 +125,19 @@ SDValue AArch64SelectionDAGInfo::EmitTargetCodeForSetTag( return EmitUnrolledSetTag(DAG, dl, Chain, Addr, ObjSize, BaseMemOperand, ZeroData); - const EVT ResTys[] = {MVT::i64, MVT::i64, MVT::Other}; - - if (Addr.getOpcode() == ISD::FrameIndex) { - int FI = cast<FrameIndexSDNode>(Addr)->getIndex(); - Addr = DAG.getTargetFrameIndex(FI, MVT::i64); + if (ObjSize % 32 != 0) { + SDNode *St1 = DAG.getMachineNode( + ZeroData ? AArch64::STZGPostIndex : AArch64::STGPostIndex, dl, + {MVT::i64, MVT::Other}, + {Addr, Addr, DAG.getTargetConstant(1, dl, MVT::i64), Chain}); + DAG.setNodeMemRefs(cast<MachineSDNode>(St1), {BaseMemOperand}); + ObjSize -= 16; + Addr = SDValue(St1, 0); + Chain = SDValue(St1, 1); } - SDValue Ops[] = {DAG.getTargetConstant(ObjSize, dl, MVT::i64), Addr, Chain}; + + const EVT ResTys[] = {MVT::i64, MVT::i64, MVT::Other}; + SDValue Ops[] = {DAG.getConstant(ObjSize, dl, MVT::i64), Addr, Chain}; SDNode *St = DAG.getMachineNode( ZeroData ? AArch64::STZGloop : AArch64::STGloop, dl, ResTys, Ops); |