From: Ulrich Weigand Date: Thu, 9 Nov 2017 16:31:57 +0000 (+0000) Subject: [SystemZ] Add support for the "o" inline asm constraint X-Git-Tag: llvmorg-6.0.0-rc1~3777 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d39e9dca1b757b7d7da53892cf6ef7e837ca45ca;p=platform%2Fupstream%2Fllvm.git [SystemZ] Add support for the "o" inline asm constraint We don't really need any special handling of "offsettable" memory addresses, but since some existing code uses inline asm statements with the "o" constraint, add support for this constraint for compatibility purposes. llvm-svn: 317807 --- diff --git a/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp b/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp index cd2f708..6ad8932 100644 --- a/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp +++ b/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp @@ -1379,8 +1379,11 @@ SelectInlineAsmMemoryOperand(const SDValue &Op, break; case InlineAsm::Constraint_T: case InlineAsm::Constraint_m: + case InlineAsm::Constraint_o: // Accept an address with a long displacement and an index. // m works the same as T, as this is the most general case. + // We don't really have any special handling of "offsettable" + // memory addresses, so just treat o the same as m. Form = SystemZAddressingMode::FormBDXNormal; DispRange = SystemZAddressingMode::Disp20Only; break; diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.h b/llvm/lib/Target/SystemZ/SystemZISelLowering.h index e2e27d9..099b442 100644 --- a/llvm/lib/Target/SystemZ/SystemZISelLowering.h +++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.h @@ -426,6 +426,8 @@ public: switch(ConstraintCode[0]) { default: break; + case 'o': + return InlineAsm::Constraint_o; case 'Q': return InlineAsm::Constraint_Q; case 'R': diff --git a/llvm/test/CodeGen/SystemZ/asm-05.ll b/llvm/test/CodeGen/SystemZ/asm-05.ll index 9b23ac7..832ae2f 100644 --- a/llvm/test/CodeGen/SystemZ/asm-05.ll +++ b/llvm/test/CodeGen/SystemZ/asm-05.ll @@ -1,4 +1,5 @@ ; Test the "m" asm constraint, which is equivalent to "T". +; Likewise for the "o" asm constraint. ; ; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s @@ -10,3 +11,12 @@ define void @f1(i64 %base) { call void asm "blah $0", "=*m" (i64 *%addr) ret void } + +define void @f2(i64 %base) { +; CHECK-LABEL: f2: +; CHECK: blah 0(%r2) +; CHECK: br %r14 + %addr = inttoptr i64 %base to i64 * + call void asm "blah $0", "=*o" (i64 *%addr) + ret void +}