1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
# RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx803 -run-pass=register-coalescer -o - %s | FileCheck -check-prefix=GCN %s
# With one version of the D48102 fix, this test failed with
# Assertion failed: (ValNo && "CopyMI input register not live"), function reMaterializeTrivialDef, file ../lib/CodeGen/RegisterCoalescer.cpp, line 1107.
# GCN: {{^body}}
--- |
target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5"
target triple = "amdgcn--amdpal"
define amdgpu_cs void @_amdgpu_cs_main(<3 x i32>) #0 {
ret void
}
attributes #0 = { nounwind "target-cpu"="gfx803" }
...
---
name: _amdgpu_cs_main
tracksRegLiveness: true
body: |
bb.0:
successors: %bb.1(0x40000000), %bb.2(0x40000000)
%0:vgpr_32 = nofpexcept V_MUL_F32_e32 0, undef %1:vgpr_32, implicit $mode, implicit $exec
%2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 killed %0, implicit $mode, implicit $exec
%3:vgpr_32 = nofpexcept V_CVT_F32_I32_e32 killed %2, implicit $mode, implicit $exec
%4:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 killed %3, implicit $mode, implicit $exec
%5:vgpr_32 = V_LSHRREV_B32_e32 4, killed %4, implicit $exec
S_CBRANCH_SCC0 %bb.2, implicit undef $scc
bb.1:
successors: %bb.5(0x80000000)
undef %6.sub1:vreg_128 = COPY killed %5
%7:vreg_128 = COPY killed %6
S_BRANCH %bb.5
bb.2:
successors: %bb.3(0x40000000), %bb.4(0x40000000)
S_CBRANCH_SCC0 %bb.4, implicit undef $scc
bb.3:
successors: %bb.5(0x80000000)
%8:sreg_32_xm0 = S_MOV_B32 0
undef %9.sub0:sgpr_128 = COPY %8
%9.sub1:sgpr_128 = COPY %8
%9.sub2:sgpr_128 = COPY %8
%9.sub3:sgpr_128 = COPY killed %8
%10:vreg_128 = COPY killed %9
%7:vreg_128 = COPY killed %10
S_BRANCH %bb.5
bb.4:
successors: %bb.5(0x80000000)
%11:sreg_32_xm0 = S_MOV_B32 0
undef %12.sub0:sgpr_128 = COPY %11
%12.sub1:sgpr_128 = COPY %11
%12.sub2:sgpr_128 = COPY %11
%12.sub3:sgpr_128 = COPY killed %11
%13:sgpr_128 = COPY killed %12
%14:vreg_128 = COPY killed %13
%7:vreg_128 = COPY killed %14
bb.5:
successors: %bb.8(0x40000000), %bb.6(0x40000000)
%15:vreg_128 = COPY killed %7
S_CBRANCH_SCC0 %bb.8, implicit undef $scc
bb.6:
successors: %bb.7(0x80000000)
%16:vreg_128 = COPY killed %15
bb.7:
successors: %bb.14(0x80000000)
%17:vreg_128 = COPY killed %16
S_BRANCH %bb.14
bb.8:
successors: %bb.9(0x40000000), %bb.11(0x40000000)
%18:vgpr_32 = V_MUL_LO_I32_e64 %15.sub1, target-flags(amdgpu-gotprel32-lo) 7, implicit $exec
S_CBRANCH_SCC1 %bb.11, implicit undef $scc
S_BRANCH %bb.9
bb.9:
successors: %bb.10(0x80000000)
%19:vreg_128 = BUFFER_LOAD_FORMAT_XYZW_IDXEN killed %18, undef %20:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s128) from constant-pool, align 1, addrspace 4)
%21:sreg_64 = V_CMP_NE_U32_e64 target-flags(amdgpu-gotprel) 0, killed %19.sub0, implicit $exec
%22:sreg_64 = COPY $exec, implicit-def $exec
%23:sreg_64 = S_AND_B64 %22, %21, implicit-def dead $scc
$exec = S_MOV_B64_term killed %23
bb.10:
successors: %bb.12(0x80000000)
$exec = S_OR_B64 $exec, killed %22, implicit-def $scc
S_BRANCH %bb.12
bb.11:
successors: %bb.13(0x80000000)
%24:vreg_128 = COPY killed %15
%24.sub0:vreg_128 = COPY undef %18
S_BRANCH %bb.13
bb.12:
successors: %bb.11(0x80000000)
S_BRANCH %bb.11
bb.13:
successors: %bb.7(0x80000000)
%16:vreg_128 = COPY killed %24
S_BRANCH %bb.7
bb.14:
successors: %bb.15(0x80000000)
S_CBRANCH_SCC1 %bb.15, implicit undef $scc
S_BRANCH %bb.15
bb.15:
undef %25.sub2:vreg_128 = COPY killed %17.sub2
%26:sreg_32_xm0 = S_MOV_B32 0
undef %27.sub0:sgpr_256 = COPY %26
%27.sub1:sgpr_256 = COPY %26
%27.sub2:sgpr_256 = COPY %26
%27.sub3:sgpr_256 = COPY %26
%27.sub4:sgpr_256 = COPY %26
%27.sub5:sgpr_256 = COPY %26
%27.sub6:sgpr_256 = COPY %26
%27.sub7:sgpr_256 = COPY killed %26
%28:vgpr_32 = IMAGE_LOAD_V1_V4 killed %25, killed %27, 2, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s128) from constant-pool, addrspace 4)
%29:vgpr_32 = nofpexcept V_ADD_F32_e32 0, killed %28, implicit $mode, implicit $exec
$m0 = S_MOV_B32 -1
DS_WRITE_B32 undef %30:vgpr_32, killed %29, 0, 0, implicit $m0, implicit $exec :: (store (s32) into `ptr addrspace(3) undef`, addrspace 3)
S_ENDPGM 0
...
|