[PATCH] D64167: [TargetLowering] support BlockAddress as "i" inline asm constraint

Nick Desaulniers via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 8 12:29:09 PDT 2019


nickdesaulniers updated this revision to Diff 208476.
nickdesaulniers marked an inline comment as done.
nickdesaulniers added a comment.

- remove missed change


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D64167/new/

https://reviews.llvm.org/D64167

Files:
  llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
  llvm/test/CodeGen/AArch64/inline-asm-blockaddress.ll


Index: llvm/test/CodeGen/AArch64/inline-asm-blockaddress.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/AArch64/inline-asm-blockaddress.ll
@@ -0,0 +1,12 @@
+; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
+; CHECK-LABEL: foo:
+; CHECK: TEST .Ltmp0
+define void @foo() {
+entry:
+  br label %bar
+bar:
+  call void asm sideeffect "#TEST $0", "i,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@foo, %bar))
+  ret void
+indirectgoto:
+  indirectbr i8* undef, [label %bar]
+}
Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -3632,6 +3632,7 @@
 
     GlobalAddressSDNode *GA;
     ConstantSDNode *C;
+    BlockAddressSDNode *BA;
     uint64_t Offset = 0;
 
     // Match (GA) or (C) or (GA+C) or (GA-C) or ((GA+C)+C) or (((GA+C)+C)+C),
@@ -3659,6 +3660,12 @@
         Ops.push_back(DAG.getTargetConstant(Offset + ExtVal,
                                             SDLoc(C), MVT::i64));
         return;
+      } else if ((BA = dyn_cast<BlockAddressSDNode>(Op)) &&
+                 ConstraintLetter != 'n') {
+        Ops.push_back(DAG.getTargetBlockAddress(
+            BA->getBlockAddress(), BA->getValueType(0),
+            Offset + BA->getOffset(), BA->getTargetFlags()));
+        return;
       } else {
         const unsigned OpCode = Op.getOpcode();
         if (OpCode == ISD::ADD || OpCode == ISD::SUB) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64167.208476.patch
Type: text/x-patch
Size: 1577 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190708/4bbb8e65/attachment.bin>


More information about the llvm-commits mailing list