Skip to content

Commit

Permalink
[AMDGPU] Correct the handling of inlineasm output registers.
Browse files Browse the repository at this point in the history
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

llvm-svn: 361868
  • Loading branch information
darkbuck committed May 28, 2019
1 parent 91f8066 commit 5fc1dfa
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
3 changes: 1 addition & 2 deletions llvm/lib/Target/AMDGPU/SIISelLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10244,8 +10244,7 @@ bool SITargetLowering::requiresUniformRegister(MachineFunction &MF,
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))
Expand Down
20 changes: 20 additions & 0 deletions llvm/test/CodeGen/AMDGPU/inline-asm.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

0 comments on commit 5fc1dfa

Please sign in to comment.