Skip to content

Commit

Permalink
[AMDGPU] Avoid using s_cmpk when src0 is not register
Browse files Browse the repository at this point in the history
The hardware spec require src0 of s_cmpk should be a register. So, we
should not optimize s_cmp to s_cmpk if src0 is not register.

Patch by Ruiling Song!
  • Loading branch information
jayfoad committed Jul 14, 2020
1 parent 3667d87 commit 1658b8d
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
5 changes: 5 additions & 0 deletions llvm/lib/Target/AMDGPU/SIShrinkInstructions.cpp
Expand Up @@ -185,6 +185,11 @@ static void shrinkScalarCompare(const SIInstrInfo *TII, MachineInstr &MI) {
if (!MI.getOperand(0).isReg())
TII->commuteInstruction(MI, false, 0, 1);

// cmpk requires src0 to be a register
const MachineOperand &Src0 = MI.getOperand(0);
if (!Src0.isReg())
return;

const MachineOperand &Src1 = MI.getOperand(1);
if (!Src1.isImm())
return;
Expand Down
11 changes: 11 additions & 0 deletions llvm/test/CodeGen/AMDGPU/cmp_shrink.mir
@@ -0,0 +1,11 @@
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass si-shrink-instructions -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s

---
name: not_shrink_icmp
body: |
bb.0:
; GCN-LABEL: name: not_shrink_icmp
; GCN: S_CMP_GT_I32 1, 65, implicit-def $scc
S_CMP_GT_I32 1, 65, implicit-def $scc
...

0 comments on commit 1658b8d

Please sign in to comment.