11
2- @dx.icb = internal addrspace(5) constant [16 x float ] [float 1.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00 ]
2+ @dx.icb = internal addrspace(5) constant [16 x i32 ] [i32 1065353216, i32 0, i32 0, i32 0, i32 0, i32 1065353216, i32 0, i32 0, i32 0, i32 0, i32 1065353216, i32 0, i32 0, i32 0, i32 0, i32 1065353216 ]
33
44define void @main() {
55entry:
@@ -11,102 +11,122 @@ entry:
1111 %5 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 3, i32 undef)
1212 %6 = mul i32 %1, 4
1313 %7 = add i32 %6, 0
14- %8 = getelementptr [16 x float ], [16 x float ] addrspace(5)* @dx.icb, i32 0, i32 %7
15- %9 = load float, float addrspace(5)* %8, align 4
16- %10 = mul i32 %1, 4
17- %11 = add i32 %10, 1
18- %12 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %11
19- %13 = load float, float addrspace(5)* %12, align 4
20- %14 = mul i32 %1, 4
21- %15 = add i32 %14, 2
22- %16 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %15
23- %17 = load float, float addrspace(5)* %16, align 4
24- %18 = mul i32 %1, 4
25- %19 = add i32 %18, 3
26- %20 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0 , i32 %19
27- %21 = load float, float addrspace(5)* %20, align 4
28- %22 = call float @dx.op.dot4.f32( i32 56, float %2, float %3, float %4, float %5, float %9, float %13, float %17, float %21)
29- %23 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef)
30- %24 = call float @dx.op.loadInput.f32( i32 4 , i32 1, i32 0, i8 1, i32 undef)
31- %25 = call float @dx.op.loadInput.f32 (i32 4 , i32 1, i32 0, i8 2, i32 undef )
32- %26 = call float @dx.op.loadInput .f32(i32 4, i32 1, i32 0, i8 3, i32 undef )
33- %27 = mul i32 % 1, 4
34- %28 = add i32 %27, 0
35- %29 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb , i32 0, i32 %28
36- %30 = load float, float addrspace(5)* %29, align 4
14+ %8 = getelementptr [16 x i32 ], [16 x i32 ] addrspace(5)* @dx.icb, i32 0, i32 %7
15+ %9 = load i32, i32 addrspace(5)* %8, align 4
16+ %10 = call float @dx.op.bitcastI32toF32( i32 126, i32 %9)
17+ %11 = mul i32 %1, 4
18+ %12 = add i32 %11, 1
19+ %13 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %12
20+ %14 = load i32, i32 addrspace(5)* %13, align 4
21+ %15 = call float @dx.op.bitcastI32toF32( i32 126, i32 %14)
22+ %16 = mul i32 %1, 4
23+ %17 = add i32 %16, 2
24+ %18 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %17
25+ %19 = load i32, i32 addrspace(5)* %18, align 4
26+ %20 = call float @dx.op.bitcastI32toF32( i32 126 , i32 %19)
27+ %21 = mul i32 %1, 4
28+ %22 = add i32 %21, 3
29+ %23 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %22
30+ %24 = load i32, i32 addrspace(5)* %23, align 4
31+ %25 = call float @dx.op.bitcastI32toF32 (i32 126 , i32 %24 )
32+ %26 = call float @dx.op.dot4 .f32(i32 56, float %2, float %3, float % 4, float %5, float %10, float %15, float %20, float %25 )
33+ %27 = call float @dx.op.loadInput.f32( i32 4, i32 1, i32 0, i8 0, i32 undef)
34+ %28 = call float @dx.op.loadInput.f32( i32 4, i32 1, i32 0, i8 1, i32 undef)
35+ %29 = call float @dx.op.loadInput.f32(i32 4 , i32 1, i32 0, i8 2, i32 undef)
36+ %30 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 3, i32 undef)
3737 %31 = mul i32 %1, 4
38- %32 = add i32 %31, 1
39- %33 = getelementptr [16 x float ], [16 x float ] addrspace(5)* @dx.icb, i32 0, i32 %32
40- %34 = load float, float addrspace(5)* %33, align 4
41- %35 = mul i32 %1, 4
42- %36 = add i32 %35, 2
43- %37 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %36
44- %38 = load float, float addrspace(5)* %37, align 4
45- %39 = mul i32 %1, 4
46- %40 = add i32 %39, 3
47- %41 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %40
48- %42 = load float, float addrspace(5)* %41, align 4
49- %43 = call float @dx.op.dot4.f32(i32 56, float %23, float %24, float %25, float %26, float %30, float %34, float %38, float %42)
50- %44 = call float @dx.op.loadInput.f32( i32 4 , i32 2, i32 0, i8 0, i32 undef)
51- %45 = call float @dx.op.loadInput.f32 (i32 4 , i32 2, i32 0, i8 1, i32 undef )
52- %46 = call float @dx.op.loadInput.f32( i32 4, i32 2, i32 0, i8 2, i32 undef)
53- %47 = call float @dx.op.loadInput.f32( i32 4, i32 2, i32 0, i8 3, i32 undef)
54- %48 = mul i32 %1, 4
55- %49 = add i32 %48, 0
56- %50 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0 , i32 %49
57- %51 = load float, float addrspace(5)* %50, align 4
58- %52 = mul i32 %1, 4
59- %53 = add i32 %52, 1
60- %54 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb , i32 0, i32 %53
61- %55 = load float, float addrspace(5)* %54, align 4
38+ %32 = add i32 %31, 0
39+ %33 = getelementptr [16 x i32 ], [16 x i32 ] addrspace(5)* @dx.icb, i32 0, i32 %32
40+ %34 = load i32, i32 addrspace(5)* %33, align 4
41+ %35 = call float @dx.op.bitcastI32toF32( i32 126, i32 %34)
42+ %36 = mul i32 %1, 4
43+ %37 = add i32 %36, 1
44+ %38 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %37
45+ %39 = load i32, i32 addrspace(5)* %38, align 4
46+ %40 = call float @dx.op.bitcastI32toF32( i32 126, i32 %39)
47+ %41 = mul i32 %1, 4
48+ %42 = add i32 %41, 2
49+ %43 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %42
50+ %44 = load i32, i32 addrspace(5)* %43, align 4
51+ %45 = call float @dx.op.bitcastI32toF32 (i32 126 , i32 %44 )
52+ %46 = mul i32 %1, 4
53+ %47 = add i32 %46, 3
54+ %48 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %47
55+ %49 = load i32, i32 addrspace(5)* %48, align 4
56+ %50 = call float @dx.op.bitcastI32toF32( i32 126 , i32 %49)
57+ %51 = call float @dx.op.dot4.f32(i32 56 , float %27, float %28, float %29, float %30, float %35, float %40, float %45, float %50)
58+ %52 = call float @dx.op.loadInput.f32( i32 4, i32 2, i32 0, i8 0, i32 undef)
59+ %53 = call float @dx.op.loadInput.f32( i32 4, i32 2, i32 0, i8 1, i32 undef)
60+ %54 = call float @dx.op.loadInput.f32(i32 4 , i32 2, i32 0, i8 2, i32 undef)
61+ %55 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef)
6262 %56 = mul i32 %1, 4
63- %57 = add i32 %56, 2
64- %58 = getelementptr [16 x float ], [16 x float ] addrspace(5)* @dx.icb, i32 0, i32 %57
65- %59 = load float, float addrspace(5)* %58, align 4
66- %60 = mul i32 %1, 4
67- %61 = add i32 %60, 3
68- %62 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %61
69- %63 = load float, float addrspace(5)* %62, align 4
70- %64 = call float @dx.op.dot4.f32( i32 56, float %44, float %45, float %46, float %47, float %51, float %55, float %59, float %63)
71- %65 = call float @dx.op.loadInput.f32 (i32 4 , i32 3, i32 0, i8 0, i32 undef )
72- %66 = call float @dx.op.loadInput.f32( i32 4, i32 3, i32 0, i8 1, i32 undef)
73- %67 = call float @dx.op.loadInput.f32( i32 4, i32 3, i32 0, i8 2, i32 undef)
74- %68 = call float @dx.op.loadInput.f32(i32 4, i32 3 , i32 0, i8 3, i32 undef)
75- %69 = mul i32 %1, 4
76- %70 = add i32 %69, 0
77- %71 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %70
78- %72 = load float, float addrspace(5)* %71, align 4
79- %73 = mul i32 %1, 4
80- %74 = add i32 %73, 1
81- %75 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0 , i32 %74
82- %76 = load float, float addrspace(5)* %75, align 4
83- %77 = mul i32 %1, 4
84- %78 = add i32 %77, 2
85- %79 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb , i32 0, i32 %78
86- %80 = load float, float addrspace(5)* %79, align 4
63+ %57 = add i32 %56, 0
64+ %58 = getelementptr [16 x i32 ], [16 x i32 ] addrspace(5)* @dx.icb, i32 0, i32 %57
65+ %59 = load i32, i32 addrspace(5)* %58, align 4
66+ %60 = call float @dx.op.bitcastI32toF32( i32 126, i32 %59)
67+ %61 = mul i32 %1, 4
68+ %62 = add i32 %61, 1
69+ %63 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %62
70+ %64 = load i32, i32 addrspace(5)* %63, align 4
71+ %65 = call float @dx.op.bitcastI32toF32 (i32 126 , i32 %64 )
72+ %66 = mul i32 % 1, 4
73+ %67 = add i32 %66, 2
74+ %68 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb , i32 0, i32 %67
75+ %69 = load i32, i32 addrspace(5)* %68, align 4
76+ %70 = call float @dx.op.bitcastI32toF32( i32 126, i32 %69)
77+ %71 = mul i32 %1, 4
78+ %72 = add i32 %71, 3
79+ %73 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %72
80+ %74 = load i32, i32 addrspace(5)* %73, align 4
81+ %75 = call float @dx.op.bitcastI32toF32( i32 126 , i32 %74)
82+ %76 = call float @dx.op.dot4.f32(i32 56 , float %52, float %53, float %54, float %55, float %60, float %65, float %70, float %75)
83+ %77 = call float @dx.op.loadInput.f32( i32 4, i32 3, i32 0, i8 0, i32 undef)
84+ %78 = call float @dx.op.loadInput.f32( i32 4, i32 3, i32 0, i8 1, i32 undef)
85+ %79 = call float @dx.op.loadInput.f32(i32 4 , i32 3, i32 0, i8 2, i32 undef)
86+ %80 = call float @dx.op.loadInput.f32(i32 4, i32 3, i32 0, i8 3, i32 undef)
8787 %81 = mul i32 %1, 4
88- %82 = add i32 %81, 3
89- %83 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %82
90- %84 = load float, float addrspace(5)* %83, align 4
91- %85 = call float @dx.op.dot4.f32(i32 56, float %65, float %66, float %67, float %68, float %72, float %76, float %80, float %84)
92- %86 = mul i32 %0, 4
93- %87 = add i32 %86, 0
94- %88 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %87
95- %89 = load float, float addrspace(5)* %88, align 4
96- %90 = mul i32 %0, 4
97- %91 = add i32 %90, 1
98- %92 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %91
99- %93 = load float, float addrspace(5)* %92, align 4
100- %94 = mul i32 %0, 4
101- %95 = add i32 %94, 2
102- %96 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %95
103- %97 = load float, float addrspace(5)* %96, align 4
104- %98 = mul i32 %0, 4
105- %99 = add i32 %98, 3
106- %100 = getelementptr [16 x float], [16 x float] addrspace(5)* @dx.icb, i32 0, i32 %99
107- %101 = load float, float addrspace(5)* %100, align 4
108- %102 = call float @dx.op.dot4.f32(i32 56, float %22, float %43, float %64, float %85, float %89, float %93, float %97, float %101)
109- call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %102)
88+ %82 = add i32 %81, 0
89+ %83 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %82
90+ %84 = load i32, i32 addrspace(5)* %83, align 4
91+ %85 = call float @dx.op.bitcastI32toF32(i32 126, i32 %84)
92+ %86 = mul i32 %1, 4
93+ %87 = add i32 %86, 1
94+ %88 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %87
95+ %89 = load i32, i32 addrspace(5)* %88, align 4
96+ %90 = call float @dx.op.bitcastI32toF32(i32 126, i32 %89)
97+ %91 = mul i32 %1, 4
98+ %92 = add i32 %91, 2
99+ %93 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %92
100+ %94 = load i32, i32 addrspace(5)* %93, align 4
101+ %95 = call float @dx.op.bitcastI32toF32(i32 126, i32 %94)
102+ %96 = mul i32 %1, 4
103+ %97 = add i32 %96, 3
104+ %98 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %97
105+ %99 = load i32, i32 addrspace(5)* %98, align 4
106+ %100 = call float @dx.op.bitcastI32toF32(i32 126, i32 %99)
107+ %101 = call float @dx.op.dot4.f32(i32 56, float %77, float %78, float %79, float %80, float %85, float %90, float %95, float %100)
108+ %102 = mul i32 %0, 4
109+ %103 = add i32 %102, 0
110+ %104 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %103
111+ %105 = load i32, i32 addrspace(5)* %104, align 4
112+ %106 = call float @dx.op.bitcastI32toF32(i32 126, i32 %105)
113+ %107 = mul i32 %0, 4
114+ %108 = add i32 %107, 1
115+ %109 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %108
116+ %110 = load i32, i32 addrspace(5)* %109, align 4
117+ %111 = call float @dx.op.bitcastI32toF32(i32 126, i32 %110)
118+ %112 = mul i32 %0, 4
119+ %113 = add i32 %112, 2
120+ %114 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %113
121+ %115 = load i32, i32 addrspace(5)* %114, align 4
122+ %116 = call float @dx.op.bitcastI32toF32(i32 126, i32 %115)
123+ %117 = mul i32 %0, 4
124+ %118 = add i32 %117, 3
125+ %119 = getelementptr [16 x i32], [16 x i32] addrspace(5)* @dx.icb, i32 0, i32 %118
126+ %120 = load i32, i32 addrspace(5)* %119, align 4
127+ %121 = call float @dx.op.bitcastI32toF32(i32 126, i32 %120)
128+ %122 = call float @dx.op.dot4.f32(i32 56, float %26, float %51, float %76, float %101, float %106, float %111, float %116, float %121)
129+ call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %122)
110130 ret void
111131}
112132
@@ -125,6 +145,9 @@ declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0
125145; Function Attrs: nounwind readonly
126146declare i32 @dx.op.tempRegLoad.i32(i32, i32) #2
127147
148+ ; Function Attrs: nounwind readnone
149+ declare float @dx.op.bitcastI32toF32(i32, i32) #0
150+
128151; Function Attrs: nounwind
129152declare void @dx.op.tempRegStore.f32(i32, i32, float) #1
130153
0 commit comments