xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/load-input-fold.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker;RUN: llc < %s -march=r600 -mcpu=cayman
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine amdgpu_vs void @main(<4 x float> inreg %reg0, <4 x float> inreg %reg1, <4 x float> inreg %reg2, <4 x float> inreg %reg3) {
4*9880d681SAndroid Build Coastguard Workermain_body:
5*9880d681SAndroid Build Coastguard Worker  %0 = extractelement <4 x float> %reg1, i32 0
6*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %reg1, i32 1
7*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %reg1, i32 2
8*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %reg1, i32 3
9*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %reg2, i32 0
10*9880d681SAndroid Build Coastguard Worker  %5 = extractelement <4 x float> %reg2, i32 1
11*9880d681SAndroid Build Coastguard Worker  %6 = extractelement <4 x float> %reg2, i32 2
12*9880d681SAndroid Build Coastguard Worker  %7 = extractelement <4 x float> %reg2, i32 3
13*9880d681SAndroid Build Coastguard Worker  %8 = extractelement <4 x float> %reg3, i32 0
14*9880d681SAndroid Build Coastguard Worker  %9 = extractelement <4 x float> %reg3, i32 1
15*9880d681SAndroid Build Coastguard Worker  %10 = extractelement <4 x float> %reg3, i32 2
16*9880d681SAndroid Build Coastguard Worker  %11 = extractelement <4 x float> %reg3, i32 3
17*9880d681SAndroid Build Coastguard Worker  %12 = load <4 x float>, <4 x float> addrspace(8)* null
18*9880d681SAndroid Build Coastguard Worker  %13 = extractelement <4 x float> %12, i32 0
19*9880d681SAndroid Build Coastguard Worker  %14 = fmul float %0, %13
20*9880d681SAndroid Build Coastguard Worker  %15 = load <4 x float>, <4 x float> addrspace(8)* null
21*9880d681SAndroid Build Coastguard Worker  %16 = extractelement <4 x float> %15, i32 1
22*9880d681SAndroid Build Coastguard Worker  %17 = fmul float %0, %16
23*9880d681SAndroid Build Coastguard Worker  %18 = load <4 x float>, <4 x float> addrspace(8)* null
24*9880d681SAndroid Build Coastguard Worker  %19 = extractelement <4 x float> %18, i32 2
25*9880d681SAndroid Build Coastguard Worker  %20 = fmul float %0, %19
26*9880d681SAndroid Build Coastguard Worker  %21 = load <4 x float>, <4 x float> addrspace(8)* null
27*9880d681SAndroid Build Coastguard Worker  %22 = extractelement <4 x float> %21, i32 3
28*9880d681SAndroid Build Coastguard Worker  %23 = fmul float %0, %22
29*9880d681SAndroid Build Coastguard Worker  %24 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 1)
30*9880d681SAndroid Build Coastguard Worker  %25 = extractelement <4 x float> %24, i32 0
31*9880d681SAndroid Build Coastguard Worker  %26 = fmul float %1, %25
32*9880d681SAndroid Build Coastguard Worker  %27 = fadd float %26, %14
33*9880d681SAndroid Build Coastguard Worker  %28 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 1)
34*9880d681SAndroid Build Coastguard Worker  %29 = extractelement <4 x float> %28, i32 1
35*9880d681SAndroid Build Coastguard Worker  %30 = fmul float %1, %29
36*9880d681SAndroid Build Coastguard Worker  %31 = fadd float %30, %17
37*9880d681SAndroid Build Coastguard Worker  %32 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 1)
38*9880d681SAndroid Build Coastguard Worker  %33 = extractelement <4 x float> %32, i32 2
39*9880d681SAndroid Build Coastguard Worker  %34 = fmul float %1, %33
40*9880d681SAndroid Build Coastguard Worker  %35 = fadd float %34, %20
41*9880d681SAndroid Build Coastguard Worker  %36 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 1)
42*9880d681SAndroid Build Coastguard Worker  %37 = extractelement <4 x float> %36, i32 3
43*9880d681SAndroid Build Coastguard Worker  %38 = fmul float %1, %37
44*9880d681SAndroid Build Coastguard Worker  %39 = fadd float %38, %23
45*9880d681SAndroid Build Coastguard Worker  %40 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 2)
46*9880d681SAndroid Build Coastguard Worker  %41 = extractelement <4 x float> %40, i32 0
47*9880d681SAndroid Build Coastguard Worker  %42 = fmul float %2, %41
48*9880d681SAndroid Build Coastguard Worker  %43 = fadd float %42, %27
49*9880d681SAndroid Build Coastguard Worker  %44 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 2)
50*9880d681SAndroid Build Coastguard Worker  %45 = extractelement <4 x float> %44, i32 1
51*9880d681SAndroid Build Coastguard Worker  %46 = fmul float %2, %45
52*9880d681SAndroid Build Coastguard Worker  %47 = fadd float %46, %31
53*9880d681SAndroid Build Coastguard Worker  %48 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 2)
54*9880d681SAndroid Build Coastguard Worker  %49 = extractelement <4 x float> %48, i32 2
55*9880d681SAndroid Build Coastguard Worker  %50 = fmul float %2, %49
56*9880d681SAndroid Build Coastguard Worker  %51 = fadd float %50, %35
57*9880d681SAndroid Build Coastguard Worker  %52 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 2)
58*9880d681SAndroid Build Coastguard Worker  %53 = extractelement <4 x float> %52, i32 3
59*9880d681SAndroid Build Coastguard Worker  %54 = fmul float %2, %53
60*9880d681SAndroid Build Coastguard Worker  %55 = fadd float %54, %39
61*9880d681SAndroid Build Coastguard Worker  %56 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 3)
62*9880d681SAndroid Build Coastguard Worker  %57 = extractelement <4 x float> %56, i32 0
63*9880d681SAndroid Build Coastguard Worker  %58 = fmul float %3, %57
64*9880d681SAndroid Build Coastguard Worker  %59 = fadd float %58, %43
65*9880d681SAndroid Build Coastguard Worker  %60 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 3)
66*9880d681SAndroid Build Coastguard Worker  %61 = extractelement <4 x float> %60, i32 1
67*9880d681SAndroid Build Coastguard Worker  %62 = fmul float %3, %61
68*9880d681SAndroid Build Coastguard Worker  %63 = fadd float %62, %47
69*9880d681SAndroid Build Coastguard Worker  %64 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 3)
70*9880d681SAndroid Build Coastguard Worker  %65 = extractelement <4 x float> %64, i32 2
71*9880d681SAndroid Build Coastguard Worker  %66 = fmul float %3, %65
72*9880d681SAndroid Build Coastguard Worker  %67 = fadd float %66, %51
73*9880d681SAndroid Build Coastguard Worker  %68 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 3)
74*9880d681SAndroid Build Coastguard Worker  %69 = extractelement <4 x float> %68, i32 3
75*9880d681SAndroid Build Coastguard Worker  %70 = fmul float %3, %69
76*9880d681SAndroid Build Coastguard Worker  %71 = fadd float %70, %55
77*9880d681SAndroid Build Coastguard Worker  %72 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 4)
78*9880d681SAndroid Build Coastguard Worker  %73 = extractelement <4 x float> %72, i32 0
79*9880d681SAndroid Build Coastguard Worker  %74 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 4)
80*9880d681SAndroid Build Coastguard Worker  %75 = extractelement <4 x float> %74, i32 1
81*9880d681SAndroid Build Coastguard Worker  %76 = load <4 x float>, <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>], [1024 x <4 x float>] addrspace(8)* null, i64 0, i32 4)
82*9880d681SAndroid Build Coastguard Worker  %77 = extractelement <4 x float> %76, i32 2
83*9880d681SAndroid Build Coastguard Worker  %78 = insertelement <4 x float> undef, float %4, i32 0
84*9880d681SAndroid Build Coastguard Worker  %79 = insertelement <4 x float> %78, float %5, i32 1
85*9880d681SAndroid Build Coastguard Worker  %80 = insertelement <4 x float> %79, float %6, i32 2
86*9880d681SAndroid Build Coastguard Worker  %81 = insertelement <4 x float> %80, float 0.000000e+00, i32 3
87*9880d681SAndroid Build Coastguard Worker  %82 = insertelement <4 x float> undef, float %73, i32 0
88*9880d681SAndroid Build Coastguard Worker  %83 = insertelement <4 x float> %82, float %75, i32 1
89*9880d681SAndroid Build Coastguard Worker  %84 = insertelement <4 x float> %83, float %77, i32 2
90*9880d681SAndroid Build Coastguard Worker  %85 = insertelement <4 x float> %84, float 0.000000e+00, i32 3
91*9880d681SAndroid Build Coastguard Worker  %86 = call float @llvm.r600.dot4(<4 x float> %81, <4 x float> %85)
92*9880d681SAndroid Build Coastguard Worker  %87 = insertelement <4 x float> undef, float %86, i32 0
93*9880d681SAndroid Build Coastguard Worker  call void @llvm.R600.store.swizzle(<4 x float> %87, i32 2, i32 2)
94*9880d681SAndroid Build Coastguard Worker  ret void
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; Function Attrs: readnone
98*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.r600.dot4(<4 x float>, <4 x float>) #1
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker; Function Attrs: readonly
101*9880d681SAndroid Build Coastguard Workerdeclare float @fabs(float) #2
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker; Function Attrs: readnone
104*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.AMDGPU.rsq(float) #1
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Worker; Function Attrs: readnone
107*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.AMDGPU.clamp.f32(float, float, float) #1
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readonly
110*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.pow.f32(float, float) #3
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.R600.store.swizzle(<4 x float>, i32, i32)
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerattributes #1 = { readnone }
115*9880d681SAndroid Build Coastguard Workerattributes #2 = { readonly }
116*9880d681SAndroid Build Coastguard Workerattributes #3 = { nounwind readonly }
117