Skip to content

Commit d9ccd0d

Browse files
committed
Merging r359883:
------------------------------------------------------------------------ r359883 | arsenm | 2019-05-03 06:42:56 -0700 (Fri, 03 May 2019) | 6 lines AMDGPU: Fix incorrect commute with sub when folding immediates When a fold of an immediate into a sub/subrev required shrinking the instruction, the wrong VOP2 opcode was used. This was using the VOP2 equivalent of the original instruction, not the commuted instruction with the inverted opcode. ------------------------------------------------------------------------ llvm-svn: 360752
1 parent 74cfa7a commit d9ccd0d

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

llvm/lib/Target/AMDGPU/SIFoldOperands.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,10 @@ static bool tryAddToFoldList(SmallVectorImpl<FoldCandidate> &FoldList,
357357

358358
assert(MI->getOperand(1).isDef());
359359

360-
int Op32 = AMDGPU::getVOPe32(Opc);
360+
// Make sure to get the 32-bit version of the commuted opcode.
361+
unsigned MaybeCommutedOpc = MI->getOpcode();
362+
int Op32 = AMDGPU::getVOPe32(MaybeCommutedOpc);
363+
361364
FoldList.push_back(FoldCandidate(MI, CommuteOpNo, OpToFold, true,
362365
Op32));
363366
return true;

llvm/test/CodeGen/AMDGPU/fold-immediate-operand-shrink.mir

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,8 @@ body: |
250250
; GCN-LABEL: name: shrink_scalar_imm_vgpr_v_sub_i32_e64_no_carry_out_use
251251
; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 12345
252252
; GCN: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
253-
; GCN: [[V_SUBREV_I32_e32_:%[0-9]+]]:vgpr_32 = V_SUBREV_I32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec
254-
; GCN: S_ENDPGM implicit [[V_SUBREV_I32_e32_]]
253+
; GCN: [[V_SUB_I32_e32_:%[0-9]+]]:vgpr_32 = V_SUB_I32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec
254+
; GCN: S_ENDPGM implicit [[V_SUB_I32_e32_]]
255255
%0:sreg_32_xm0 = S_MOV_B32 12345
256256
%1:vgpr_32 = IMPLICIT_DEF
257257
%2:vgpr_32, %3:sreg_64 = V_SUB_I32_e64 %0, %1, implicit $exec
@@ -269,8 +269,8 @@ body: |
269269
; GCN-LABEL: name: shrink_vgpr_scalar_imm_v_sub_i32_e64_no_carry_out_use
270270
; GCN: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
271271
; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 12345
272-
; GCN: [[V_SUB_I32_e32_:%[0-9]+]]:vgpr_32 = V_SUB_I32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec
273-
; GCN: S_ENDPGM implicit [[V_SUB_I32_e32_]]
272+
; GCN: [[V_SUBREV_I32_e32_:%[0-9]+]]:vgpr_32 = V_SUBREV_I32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec
273+
; GCN: S_ENDPGM implicit [[V_SUBREV_I32_e32_]]
274274
%0:vgpr_32 = IMPLICIT_DEF
275275
%1:sreg_32_xm0 = S_MOV_B32 12345
276276
%2:vgpr_32, %3:sreg_64 = V_SUB_I32_e64 %0, %1, implicit $exec
@@ -288,8 +288,8 @@ body: |
288288
; GCN-LABEL: name: shrink_scalar_imm_vgpr_v_subrev_i32_e64_no_carry_out_use
289289
; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 12345
290290
; GCN: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
291-
; GCN: [[V_SUB_I32_e32_:%[0-9]+]]:vgpr_32 = V_SUB_I32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec
292-
; GCN: S_ENDPGM implicit [[V_SUB_I32_e32_]]
291+
; GCN: [[V_SUBREV_I32_e32_:%[0-9]+]]:vgpr_32 = V_SUBREV_I32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec
292+
; GCN: S_ENDPGM implicit [[V_SUBREV_I32_e32_]]
293293
%0:sreg_32_xm0 = S_MOV_B32 12345
294294
%1:vgpr_32 = IMPLICIT_DEF
295295
%2:vgpr_32, %3:sreg_64 = V_SUBREV_I32_e64 %0, %1, implicit $exec
@@ -307,8 +307,8 @@ body: |
307307
; GCN-LABEL: name: shrink_vgpr_scalar_imm_v_subrev_i32_e64_no_carry_out_use
308308
; GCN: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
309309
; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 12345
310-
; GCN: [[V_SUBREV_I32_e32_:%[0-9]+]]:vgpr_32 = V_SUBREV_I32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec
311-
; GCN: S_ENDPGM implicit [[V_SUBREV_I32_e32_]]
310+
; GCN: [[V_SUB_I32_e32_:%[0-9]+]]:vgpr_32 = V_SUB_I32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec
311+
; GCN: S_ENDPGM implicit [[V_SUB_I32_e32_]]
312312
%0:vgpr_32 = IMPLICIT_DEF
313313
%1:sreg_32_xm0 = S_MOV_B32 12345
314314
%2:vgpr_32, %3:sreg_64 = V_SUBREV_I32_e64 %0, %1, implicit $exec

0 commit comments

Comments
 (0)