
Do not fold an immediate into an instruction that already has a frame index operand. A frame index could possibly turn out to be another immediate. Fixes: SWDEV-536263 --------- Co-authored-by: Matt Arsenault <arsenm2@gmail.com>
137 lines
10 KiB
LLVM
137 lines
10 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck %s
|
|
|
|
define amdgpu_gfx [13 x i32] @issue130120() {
|
|
; CHECK-LABEL: issue130120:
|
|
; CHECK: ; %bb.0: ; %bb
|
|
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
|
|
; CHECK-NEXT: v_mov_b32_e32 v0, 0
|
|
; CHECK-NEXT: s_movk_i32 s1, 0xf4
|
|
; CHECK-NEXT: s_movk_i32 s2, 0xf8
|
|
; CHECK-NEXT: s_movk_i32 s3, 0xfc
|
|
; CHECK-NEXT: s_movk_i32 s34, 0x100
|
|
; CHECK-NEXT: v_mov_b32_e32 v1, v0
|
|
; CHECK-NEXT: s_movk_i32 s35, 0x104
|
|
; CHECK-NEXT: s_movk_i32 s36, 0x108
|
|
; CHECK-NEXT: s_movk_i32 s37, 0x110
|
|
; CHECK-NEXT: s_movk_i32 s38, 0x120
|
|
; CHECK-NEXT: s_add_i32 s0, s32, 0xf0
|
|
; CHECK-NEXT: s_add_i32 s1, s32, s1
|
|
; CHECK-NEXT: s_add_i32 s2, s32, s2
|
|
; CHECK-NEXT: s_add_i32 s3, s32, s3
|
|
; CHECK-NEXT: s_add_i32 s34, s32, s34
|
|
; CHECK-NEXT: s_add_i32 s35, s32, s35
|
|
; CHECK-NEXT: s_add_i32 s36, s32, s36
|
|
; CHECK-NEXT: s_add_i32 s37, s32, s37
|
|
; CHECK-NEXT: s_add_i32 s38, s32, s38
|
|
; CHECK-NEXT: s_or_b32 s39, s32, 4
|
|
; CHECK-NEXT: s_or_b32 s40, s32, 8
|
|
; CHECK-NEXT: s_or_b32 s41, s32, 12
|
|
; CHECK-NEXT: s_add_i32 s42, s32, 16
|
|
; CHECK-NEXT: s_add_i32 s43, s32, 20
|
|
; CHECK-NEXT: s_add_i32 s44, s32, 24
|
|
; CHECK-NEXT: s_mov_b32 s46, 1
|
|
; CHECK-NEXT: s_movk_i32 s45, 0x990
|
|
; CHECK-NEXT: s_mov_b32 s48, 0
|
|
; CHECK-NEXT: .LBB0_1: ; %bb3
|
|
; CHECK-NEXT: ; =>This Inner Loop Header: Depth=1
|
|
; CHECK-NEXT: s_cmp_eq_u32 s46, 0
|
|
; CHECK-NEXT: s_mov_b32 s49, s48
|
|
; CHECK-NEXT: s_mov_b32 s50, s48
|
|
; CHECK-NEXT: s_cselect_b32 s51, 0, s1
|
|
; CHECK-NEXT: s_cselect_b32 s55, 0, s35
|
|
; CHECK-NEXT: v_dual_mov_b32 v2, s48 :: v_dual_mov_b32 v3, s49
|
|
; CHECK-NEXT: s_cselect_b32 s52, 0, s2
|
|
; CHECK-NEXT: s_cselect_b32 s56, 0, s36
|
|
; CHECK-NEXT: s_cselect_b32 vcc_lo, 0, s43
|
|
; CHECK-NEXT: v_mov_b32_e32 v4, s50
|
|
; CHECK-NEXT: s_cselect_b32 s47, s45, 0xf0
|
|
; CHECK-NEXT: s_cselect_b32 s53, 0, s3
|
|
; CHECK-NEXT: s_cselect_b32 s54, 0, s34
|
|
; CHECK-NEXT: s_cselect_b32 s57, 0, s37
|
|
; CHECK-NEXT: s_cselect_b32 s58, 0, s38
|
|
; CHECK-NEXT: s_cselect_b32 s59, 0, s0
|
|
; CHECK-NEXT: s_cselect_b32 s60, 0, s39
|
|
; CHECK-NEXT: s_cselect_b32 s61, 0, s40
|
|
; CHECK-NEXT: s_cselect_b32 s62, 0, s41
|
|
; CHECK-NEXT: s_cselect_b32 s63, 0, s42
|
|
; CHECK-NEXT: s_cselect_b32 vcc_hi, 0, s44
|
|
; CHECK-NEXT: s_mov_b32 s46, s48
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s51
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s52
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s53
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s54
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s55
|
|
; CHECK-NEXT: scratch_store_b64 off, v[0:1], s56
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s57
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s47
|
|
; CHECK-NEXT: scratch_store_b96 off, v[2:4], s58
|
|
; CHECK-NEXT: scratch_store_b96 off, v[2:4], s59
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s60
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s61
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s62
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, s63
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, vcc_lo
|
|
; CHECK-NEXT: scratch_store_b32 off, v0, vcc_hi
|
|
; CHECK-NEXT: s_mov_b32 vcc_lo, exec_lo
|
|
; CHECK-NEXT: s_cbranch_vccnz .LBB0_1
|
|
; CHECK-NEXT: ; %bb.2: ; %DummyReturnBlock
|
|
; CHECK-NEXT: s_setpc_b64 s[30:31]
|
|
bb:
|
|
%i = alloca [8 x { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, { <3 x float>, float, <3 x float>, float }, float, i32, i32, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, i32, i32, i32, i32, i32, i32, i32, i32 }], i32 0, align 16, addrspace(5)
|
|
%i1 = getelementptr [8 x { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, { <3 x float>, float, <3 x float>, float }, float, i32, i32, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, i32, i32, i32, i32, i32, i32, i32, i32 }], ptr addrspace(5) %i, i32 0, i32 0, i32 20
|
|
%i2 = getelementptr [8 x { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, { <3 x float>, float, <3 x float>, float }, float, i32, i32, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, i32, i32, i32, i32, i32, i32, i32, i32 }], ptr addrspace(5) %i, i32 0, i32 6, i32 20
|
|
br label %bb3
|
|
|
|
bb3: ; preds = %bb3, %bb
|
|
%i4 = phi i32 [ 1, %bb ], [ 0, %bb3 ]
|
|
%i5 = icmp eq i32 %i4, 0
|
|
%i6 = select i1 %i5, ptr addrspace(5) %i2, ptr addrspace(5) %i1
|
|
store i32 0, ptr addrspace(5) %i6, align 16
|
|
%i7 = getelementptr { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, ptr addrspace(5) %i1, i32 0, i32 1
|
|
%i8 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i7
|
|
store float 0.000000e+00, ptr addrspace(5) %i8, align 4
|
|
%i9 = getelementptr { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, ptr addrspace(5) %i1, i32 0, i32 2
|
|
%i10 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i9
|
|
store i32 0, ptr addrspace(5) %i10, align 8
|
|
%i11 = getelementptr { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, ptr addrspace(5) %i1, i32 0, i32 3
|
|
%i12 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i11
|
|
store i32 0, ptr addrspace(5) %i12, align 4
|
|
%i13 = getelementptr { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, ptr addrspace(5) %i1, i32 0, i32 4
|
|
%i14 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i13
|
|
store i32 0, ptr addrspace(5) %i14, align 16
|
|
%i15 = getelementptr { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, ptr addrspace(5) %i1, i32 0, i32 5
|
|
%i16 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i15
|
|
store i32 0, ptr addrspace(5) %i16, align 4
|
|
%i17 = getelementptr { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, ptr addrspace(5) %i1, i32 0, i32 6
|
|
%i18 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i17
|
|
store <2 x float> zeroinitializer, ptr addrspace(5) %i18, align 8
|
|
%i19 = getelementptr { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, ptr addrspace(5) %i1, i32 0, i32 7
|
|
%i20 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i19
|
|
store i32 0, ptr addrspace(5) %i20, align 16
|
|
%i21 = getelementptr { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, ptr addrspace(5) %i1, i32 0, i32 8
|
|
%i22 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i21
|
|
store <3 x float> zeroinitializer, ptr addrspace(5) %i22, align 16
|
|
%i23 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i1
|
|
store <3 x float> zeroinitializer, ptr addrspace(5) %i23, align 16
|
|
%i24 = getelementptr { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, { <3 x float>, float, <3 x float>, float }, float, i32, i32, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, i32, i32, i32, i32, i32, i32, i32, i32 }, ptr addrspace(5) %i, i32 0, i32 1
|
|
%i25 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i24
|
|
store i32 0, ptr addrspace(5) %i25, align 4
|
|
%i26 = getelementptr { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, { <3 x float>, float, <3 x float>, float }, float, i32, i32, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, i32, i32, i32, i32, i32, i32, i32, i32 }, ptr addrspace(5) %i, i32 0, i32 2
|
|
%i27 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i26
|
|
store i32 0, ptr addrspace(5) %i27, align 8
|
|
%i28 = getelementptr { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, { <3 x float>, float, <3 x float>, float }, float, i32, i32, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, i32, i32, i32, i32, i32, i32, i32, i32 }, ptr addrspace(5) %i, i32 0, i32 3
|
|
%i29 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i28
|
|
store i32 0, ptr addrspace(5) %i29, align 4
|
|
%i30 = getelementptr { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, { <3 x float>, float, <3 x float>, float }, float, i32, i32, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, i32, i32, i32, i32, i32, i32, i32, i32 }, ptr addrspace(5) %i, i32 0, i32 4
|
|
%i31 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i30
|
|
store i32 0, ptr addrspace(5) %i31, align 16
|
|
%i32 = getelementptr { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, { <3 x float>, float, <3 x float>, float }, float, i32, i32, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, i32, i32, i32, i32, i32, i32, i32, i32 }, ptr addrspace(5) %i, i32 0, i32 5
|
|
%i33 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i32
|
|
store i32 0, ptr addrspace(5) %i33, align 4
|
|
%i34 = getelementptr { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, { <3 x float>, float, <3 x float>, float }, float, i32, i32, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, { i32, float, i32, i32, i32, i32, <2 x float>, i32, <3 x float>, <3 x float> }, i32, i32, i32, i32, i32, i32, i32, i32, i32 }, ptr addrspace(5) %i, i32 0, i32 6
|
|
%i35 = select i1 %i5, ptr addrspace(5) null, ptr addrspace(5) %i34
|
|
store i32 0, ptr addrspace(5) %i35, align 8
|
|
br label %bb3
|
|
}
|