Don't use a potentially expensive shift if all we want is one set bit.
[oota-llvm.git] / lib / Target / R600 / AMDGPUCallingConv.td
index 45ae37ef0c7f88b780d0d01e956606200b1fcc54..826932b3b848d0329af3ac3aa62c20262d1d0486 100644 (file)
@@ -36,7 +36,18 @@ def CC_SI : CallingConv<[
 
 ]>;
 
+// Calling convention for SI compute kernels
+def CC_SI_Kernel : CallingConv<[
+  CCIfType<[v4i32, v4f32], CCAssignToStack <16, 4>>,
+  CCIfType<[i64],          CCAssignToStack < 8, 4>>,
+  CCIfType<[i32, f32],     CCAssignToStack < 4, 4>>,
+  CCIfType<[i16],          CCAssignToStack < 2, 4>>,
+  CCIfType<[i8],           CCAssignToStack < 1, 4>>
+]>;
+
 def CC_AMDGPU : CallingConv<[
-  CCIf<"State.getTarget().getSubtarget<AMDGPUSubtarget>().device()"#
-       "->getGeneration() == AMDGPUDeviceInfo::HD7XXX", CCDelegateTo<CC_SI>>
+  CCIf<"State.getMachineFunction().getInfo<SIMachineFunctionInfo>()->"#
+       "ShaderType == ShaderType::COMPUTE", CCDelegateTo<CC_SI_Kernel>>,
+  CCIf<"State.getTarget().getSubtarget<AMDGPUSubtarget>()"#
+       ".getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS", CCDelegateTo<CC_SI>>
 ]>;