[llvm] r361868 - [AMDGPU] Correct the handling of inlineasm output registers.

Michael Liao via llvm-commits llvm-commits at lists.llvm.org
Tue May 28 12:37:10 PDT 2019


Author: hliao
Date: Tue May 28 12:37:09 2019
New Revision: 361868

URL: http://llvm.org/viewvc/llvm-project?rev=361868&view=rev
Log:
[AMDGPU] Correct the handling of inlineasm output registers.

Summary:
- There's a regression due to the cross-block RC assignment. Use the
  proper way to derive the output register RC in inline asm.

Reviewers: rampitec, alex-t

Subscribers: arsenm, kzhuravl, jvesely, wdng, nhaehnle, dstuttard, tpr, t-tye, eraman, hiraditya, llvm-commits, yaxunl

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D62537

Modified:
    llvm/trunk/lib/Target/AMDGPU/SIISelLowering.cpp
    llvm/trunk/test/CodeGen/AMDGPU/inline-asm.ll

Modified: llvm/trunk/lib/Target/AMDGPU/SIISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/SIISelLowering.cpp?rev=361868&r1=361867&r2=361868&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/SIISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/SIISelLowering.cpp Tue May 28 12:37:09 2019
@@ -10244,8 +10244,7 @@ bool SITargetLowering::requiresUniformRe
           unsigned AssignedReg;
           const TargetRegisterClass *RC;
           std::tie(AssignedReg, RC) = getRegForInlineAsmConstraint(
-              SIRI, TC.ConstraintCode,
-              getSimpleValueType(MF.getDataLayout(), CS.getType()));
+              SIRI, TC.ConstraintCode, TC.ConstraintVT);
           if (RC) {
             MachineRegisterInfo &MRI = MF.getRegInfo();
             if (AssignedReg != 0 && SIRI->isSGPRReg(MRI, AssignedReg))

Modified: llvm/trunk/test/CodeGen/AMDGPU/inline-asm.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/inline-asm.ll?rev=361868&r1=361867&r2=361868&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/inline-asm.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/inline-asm.ll Tue May 28 12:37:09 2019
@@ -277,3 +277,23 @@ entry:
   tail call void asm sideeffect "; sgpr96 $0", "s"(<3 x i32> <i32 10, i32 11, i32 12>) #1
   ret void
 }
+
+; Check aggregate types are handled properly.
+; CHECK-LABEL: mad_u64
+; CHECK: v_mad_u64_u32
+define void @mad_u64(i32 %x) {
+entry:
+  br i1 undef, label %exit, label %false
+
+false:
+  %s0 = tail call { i64, i64 } asm sideeffect "v_mad_u64_u32 $0, $1, $2, $3, $4", "=v,=s,v,v,v"(i32 -766435501, i32 %x, i64 0)
+  br label %exit
+
+exit:
+  %s1 = phi { i64, i64} [ undef, %entry ], [ %s0, %false]
+  %v0 = extractvalue { i64, i64 } %s1, 0
+  %v1 = extractvalue { i64, i64 } %s1, 1
+  tail call void asm sideeffect "; use $0", "v"(i64 %v0)
+  tail call void asm sideeffect "; use $0", "v"(i64 %v1)
+  ret void
+}




More information about the llvm-commits mailing list