@@ -86,3 +86,73 @@ entry:
86
86
store double %call1 , double addrspace (1 )* %arrayidx2 , align 8
87
87
ret void
88
88
}
89
+
90
+ define spir_kernel void @sitofp_kernel (i32 addrspace (1 )* %inA , double addrspace (1 )* %out , <8 x i32 > %r0 , <8 x i32 > %payloadHeader , <3 x i32 > %enqueuedLocalSize , i16 %localIdX , i16 %localIdY , i16 %localIdZ , i8* %privateBase , i32 %bufferOffset , i32 %bufferOffset1 ) #0 {
91
+ ; CHECK-LABEL: @sitofp_kernel(
92
+ ; CHECK: entry:
93
+ ; CHECK: [[TMP0:%.*]] = extractelement <8 x i32> %payloadHeader, i32 0
94
+ ; CHECK: [[TMP1:%.*]] = extractelement <3 x i32> %enqueuedLocalSize, i32 0
95
+ ; CHECK: [[TMP2:%.*]] = extractelement <8 x i32> %r0, i32 1
96
+ ; CHECK: [[MUL:%.*]] = mul i32 [[TMP1]], [[TMP2]]
97
+ ; CHECK: [[LOCAL_ID_X:%.*]] = zext i16 %localIdX to i32
98
+ ; CHECK: [[ADD0:%.*]] = add i32 [[MUL]], [[LOCAL_ID_X]]
99
+ ; CHECK: [[ADD1:%.*]] = add i32 [[ADD0]], [[TMP0]]
100
+ ; CHECK: [[CONV0:%.*]] = zext i32 [[ADD1]] to i64
101
+ ; CHECK: [[ARRAY_IDX0:%.*]] = getelementptr inbounds i32, i32 addrspace(1)* %inA, i64 [[CONV0]]
102
+ ; CHECK: [[TMP3:%.*]] = load i32, i32 addrspace(1)* [[ARRAY_IDX0]], align 4
103
+ ; CHECK: [[CALL_TMP:%.*]] = call double @__igcbuiltin_int32_to_dp(i32 [[TMP3]])
104
+ ; CHECK: [[ARRAY_IDX1:%.*]] = getelementptr inbounds double, double addrspace(1)* %out, i64 [[CONV0]]
105
+ ; CHECK: store double [[CALL_TMP]], double addrspace(1)* [[ARRAY_IDX1]], align 8
106
+ ; CHECK: ret void
107
+ ;
108
+ entry:
109
+ %payloadHeader.scalar = extractelement <8 x i32 > %payloadHeader , i32 0
110
+ %enqueuedLocalSize.scalar = extractelement <3 x i32 > %enqueuedLocalSize , i32 0
111
+ %r0.scalar18 = extractelement <8 x i32 > %r0 , i32 1
112
+ %mul.i.i.i = mul i32 %enqueuedLocalSize.scalar , %r0.scalar18
113
+ %localIdX3 = zext i16 %localIdX to i32
114
+ %add.i.i.i = add i32 %mul.i.i.i , %localIdX3
115
+ %add4.i.i.i = add i32 %add.i.i.i , %payloadHeader.scalar
116
+ %conv.i.i.i = zext i32 %add4.i.i.i to i64
117
+ %arrayidx = getelementptr inbounds i32 , i32 addrspace (1 )* %inA , i64 %conv.i.i.i
118
+ %0 = load i32 , i32 addrspace (1 )* %arrayidx , align 4
119
+ %call1 = sitofp i32 %0 to double
120
+ %arrayidx2 = getelementptr inbounds double , double addrspace (1 )* %out , i64 %conv.i.i.i
121
+ store double %call1 , double addrspace (1 )* %arrayidx2 , align 8
122
+ ret void
123
+ }
124
+
125
+ define spir_kernel void @uitofp_kernel (i32 addrspace (1 )* %inA , double addrspace (1 )* %out , <8 x i32 > %r0 , <8 x i32 > %payloadHeader , <3 x i32 > %enqueuedLocalSize , i16 %localIdX , i16 %localIdY , i16 %localIdZ , i8* %privateBase , i32 %bufferOffset , i32 %bufferOffset1 ) #0 {
126
+ ; CHECK-LABEL: @uitofp_kernel(
127
+ ; CHECK: entry:
128
+ ; CHECK: [[TMP0:%.*]] = extractelement <8 x i32> %payloadHeader, i32 0
129
+ ; CHECK: [[TMP1:%.*]] = extractelement <3 x i32> %enqueuedLocalSize, i32 0
130
+ ; CHECK: [[TMP2:%.*]] = extractelement <8 x i32> %r0, i32 1
131
+ ; CHECK: [[MUL:%.*]] = mul i32 [[TMP1]], [[TMP2]]
132
+ ; CHECK: [[LOCAL_ID_X:%.*]] = zext i16 %localIdX to i32
133
+ ; CHECK: [[ADD0:%.*]] = add i32 [[MUL]], [[LOCAL_ID_X]]
134
+ ; CHECK: [[ADD1:%.*]] = add i32 [[ADD0]], [[TMP0]]
135
+ ; CHECK: [[CONV0:%.*]] = zext i32 [[ADD1]] to i64
136
+ ; CHECK: [[ARRAY_IDX0:%.*]] = getelementptr inbounds i32, i32 addrspace(1)* %inA, i64 [[CONV0]]
137
+ ; CHECK: [[TMP3:%.*]] = load i32, i32 addrspace(1)* [[ARRAY_IDX0]], align 4
138
+ ; CHECK: [[CALL_TMP:%.*]] = call double @__igcbuiltin_uint32_to_dp(i32 [[TMP3]])
139
+ ; CHECK: [[ARRAY_IDX1:%.*]] = getelementptr inbounds double, double addrspace(1)* %out, i64 [[CONV0]]
140
+ ; CHECK: store double [[CALL_TMP]], double addrspace(1)* [[ARRAY_IDX1]], align 8
141
+ ; CHECK: ret void
142
+ ;
143
+ entry:
144
+ %payloadHeader.scalar = extractelement <8 x i32 > %payloadHeader , i32 0
145
+ %enqueuedLocalSize.scalar = extractelement <3 x i32 > %enqueuedLocalSize , i32 0
146
+ %r0.scalar18 = extractelement <8 x i32 > %r0 , i32 1
147
+ %mul.i.i.i = mul i32 %enqueuedLocalSize.scalar , %r0.scalar18
148
+ %localIdX3 = zext i16 %localIdX to i32
149
+ %add.i.i.i = add i32 %mul.i.i.i , %localIdX3
150
+ %add4.i.i.i = add i32 %add.i.i.i , %payloadHeader.scalar
151
+ %conv.i.i.i = zext i32 %add4.i.i.i to i64
152
+ %arrayidx = getelementptr inbounds i32 , i32 addrspace (1 )* %inA , i64 %conv.i.i.i
153
+ %0 = load i32 , i32 addrspace (1 )* %arrayidx , align 4
154
+ %call1 = uitofp i32 %0 to double
155
+ %arrayidx2 = getelementptr inbounds double , double addrspace (1 )* %out , i64 %conv.i.i.i
156
+ store double %call1 , double addrspace (1 )* %arrayidx2 , align 8
157
+ ret void
158
+ }
0 commit comments