diff options
| author | Tom Stellard <thomas.stellard@amd.com> | 2013-09-05 18:38:09 +0000 |
|---|---|---|
| committer | Tom Stellard <thomas.stellard@amd.com> | 2013-09-05 18:38:09 +0000 |
| commit | 13c68ef88b23458a5030579e651fd204c8d3a0b8 (patch) | |
| tree | 94a940e0e4cbec07a76642107200f54a8436c835 /llvm/lib/Target/R600/R600ISelLowering.cpp | |
| parent | 53f2f90eb4b0cb1267467abc3a956fbb7aca2101 (diff) | |
| download | bcm5719-llvm-13c68ef88b23458a5030579e651fd204c8d3a0b8.tar.gz bcm5719-llvm-13c68ef88b23458a5030579e651fd204c8d3a0b8.zip | |
R600: Add support for local memory atomic add
llvm-svn: 190080
Diffstat (limited to 'llvm/lib/Target/R600/R600ISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/R600/R600ISelLowering.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/llvm/lib/Target/R600/R600ISelLowering.cpp b/llvm/lib/Target/R600/R600ISelLowering.cpp index 450e2a86da3..ff9ba52d0ba 100644 --- a/llvm/lib/Target/R600/R600ISelLowering.cpp +++ b/llvm/lib/Target/R600/R600ISelLowering.cpp @@ -109,16 +109,24 @@ MachineBasicBlock * R600TargetLowering::EmitInstrWithCustomInserter( switch (MI->getOpcode()) { default: - if (TII->get(MI->getOpcode()).TSFlags & R600_InstFlag::LDS_1A) { - MachineInstrBuilder NewMI = BuildMI(*BB, I, BB->findDebugLoc(I), - TII->get(MI->getOpcode()), - AMDGPU::OQAP); + if (TII->isLDSInstr(MI->getOpcode()) && + TII->getOperandIdx(MI->getOpcode(), AMDGPU::OpName::dst) != -1) { + int DstIdx = TII->getOperandIdx(MI->getOpcode(), AMDGPU::OpName::dst); + assert(DstIdx != -1); + MachineInstrBuilder NewMI; + if (!MRI.use_empty(MI->getOperand(DstIdx).getReg())) { + NewMI = BuildMI(*BB, I, BB->findDebugLoc(I), TII->get(MI->getOpcode()), + AMDGPU::OQAP); + TII->buildDefaultInstruction(*BB, I, AMDGPU::MOV, + MI->getOperand(0).getReg(), + AMDGPU::OQAP); + } else { + NewMI = BuildMI(*BB, I, BB->findDebugLoc(I), + TII->get(AMDGPU::getLDSNoRetOp(MI->getOpcode()))); + } for (unsigned i = 1, e = MI->getNumOperands(); i < e; ++i) { NewMI.addOperand(MI->getOperand(i)); } - TII->buildDefaultInstruction(*BB, I, AMDGPU::MOV, - MI->getOperand(0).getReg(), - AMDGPU::OQAP); } else { return AMDGPUTargetLowering::EmitInstrWithCustomInserter(MI, BB); } |

