|
@@ -0,0 +1,121 @@
|
|
|
+// Run: %dxc -T ps_6_0 -E main
|
|
|
+
|
|
|
+void main() {
|
|
|
+ int a, b, c;
|
|
|
+ uint i, j, k;
|
|
|
+ float o, p, q;
|
|
|
+
|
|
|
+// CHECK: [[a0:%\d+]] = OpLoad %int %a
|
|
|
+// CHECK-NEXT: [[b0:%\d+]] = OpLoad %int %b
|
|
|
+// CHECK-NEXT: [[c0:%\d+]] = OpIAdd %int [[a0]] [[b0]]
|
|
|
+// CHECK-NEXT: OpStore %c [[c0]]
|
|
|
+ c = a + b;
|
|
|
+// CHECK-NEXT: [[i0:%\d+]] = OpLoad %uint %i
|
|
|
+// CHECK-NEXT: [[j0:%\d+]] = OpLoad %uint %j
|
|
|
+// CHECK-NEXT: [[k0:%\d+]] = OpIAdd %uint [[i0]] [[j0]]
|
|
|
+// CHECK-NEXT: OpStore %k [[k0]]
|
|
|
+ k = i + j;
|
|
|
+// CHECK-NEXT: [[o0:%\d+]] = OpLoad %float %o
|
|
|
+// CHECK-NEXT: [[p0:%\d+]] = OpLoad %float %p
|
|
|
+// CHECK-NEXT: [[q0:%\d+]] = OpFAdd %float [[o0]] [[p0]]
|
|
|
+// CHECK-NEXT: OpStore %q [[q0]]
|
|
|
+ q = o + p;
|
|
|
+
|
|
|
+// CHECK-NEXT: [[a1:%\d+]] = OpLoad %int %a
|
|
|
+// CHECK-NEXT: [[b1:%\d+]] = OpLoad %int %b
|
|
|
+// CHECK-NEXT: [[c1:%\d+]] = OpISub %int [[a1]] [[b1]]
|
|
|
+// CHECK-NEXT: OpStore %c [[c1]]
|
|
|
+ c = a - b;
|
|
|
+// CHECK-NEXT: [[i1:%\d+]] = OpLoad %uint %i
|
|
|
+// CHECK-NEXT: [[j1:%\d+]] = OpLoad %uint %j
|
|
|
+// CHECK-NEXT: [[k1:%\d+]] = OpISub %uint [[i1]] [[j1]]
|
|
|
+// CHECK-NEXT: OpStore %k [[k1]]
|
|
|
+ k = i - j;
|
|
|
+// CHECK-NEXT: [[o1:%\d+]] = OpLoad %float %o
|
|
|
+// CHECK-NEXT: [[p1:%\d+]] = OpLoad %float %p
|
|
|
+// CHECK-NEXT: [[q1:%\d+]] = OpFSub %float [[o1]] [[p1]]
|
|
|
+// CHECK-NEXT: OpStore %q [[q1]]
|
|
|
+ q = o - p;
|
|
|
+
|
|
|
+// CHECK-NEXT: [[a2:%\d+]] = OpLoad %int %a
|
|
|
+// CHECK-NEXT: [[b2:%\d+]] = OpLoad %int %b
|
|
|
+// CHECK-NEXT: [[c2:%\d+]] = OpIMul %int [[a2]] [[b2]]
|
|
|
+// CHECK-NEXT: OpStore %c [[c2]]
|
|
|
+ c = a * b;
|
|
|
+// CHECK-NEXT: [[i2:%\d+]] = OpLoad %uint %i
|
|
|
+// CHECK-NEXT: [[j2:%\d+]] = OpLoad %uint %j
|
|
|
+// CHECK-NEXT: [[k2:%\d+]] = OpIMul %uint [[i2]] [[j2]]
|
|
|
+// CHECK-NEXT: OpStore %k [[k2]]
|
|
|
+ k = i * j;
|
|
|
+// CHECK-NEXT: [[o2:%\d+]] = OpLoad %float %o
|
|
|
+// CHECK-NEXT: [[p2:%\d+]] = OpLoad %float %p
|
|
|
+// CHECK-NEXT: [[q2:%\d+]] = OpFMul %float [[o2]] [[p2]]
|
|
|
+// CHECK-NEXT: OpStore %q [[q2]]
|
|
|
+ q = o * p;
|
|
|
+
|
|
|
+// CHECK-NEXT: [[a3:%\d+]] = OpLoad %int %a
|
|
|
+// CHECK-NEXT: [[b3:%\d+]] = OpLoad %int %b
|
|
|
+// CHECK-NEXT: [[c3:%\d+]] = OpSDiv %int [[a3]] [[b3]]
|
|
|
+// CHECK-NEXT: OpStore %c [[c3]]
|
|
|
+ c = a / b;
|
|
|
+// CHECK-NEXT: [[i3:%\d+]] = OpLoad %uint %i
|
|
|
+// CHECK-NEXT: [[j3:%\d+]] = OpLoad %uint %j
|
|
|
+// CHECK-NEXT: [[k3:%\d+]] = OpUDiv %uint [[i3]] [[j3]]
|
|
|
+// CHECK-NEXT: OpStore %k [[k3]]
|
|
|
+ k = i / j;
|
|
|
+// CHECK-NEXT: [[o3:%\d+]] = OpLoad %float %o
|
|
|
+// CHECK-NEXT: [[p3:%\d+]] = OpLoad %float %p
|
|
|
+// CHECK-NEXT: [[q3:%\d+]] = OpFDiv %float [[o3]] [[p3]]
|
|
|
+// CHECK-NEXT: OpStore %q [[q3]]
|
|
|
+ q = o / p;
|
|
|
+
|
|
|
+// CHECK-NEXT: [[a4:%\d+]] = OpLoad %int %a
|
|
|
+// CHECK-NEXT: [[b4:%\d+]] = OpLoad %int %b
|
|
|
+// CHECK-NEXT: [[c4:%\d+]] = OpSRem %int [[a4]] [[b4]]
|
|
|
+// CHECK-NEXT: OpStore %c [[c4]]
|
|
|
+ c = a % b;
|
|
|
+// CHECK-NEXT: [[i4:%\d+]] = OpLoad %uint %i
|
|
|
+// CHECK-NEXT: [[j4:%\d+]] = OpLoad %uint %j
|
|
|
+// CHECK-NEXT: [[k4:%\d+]] = OpUMod %uint [[i4]] [[j4]]
|
|
|
+// CHECK-NEXT: OpStore %k [[k4]]
|
|
|
+ k = i % j;
|
|
|
+// CHECK-NEXT: [[o4:%\d+]] = OpLoad %float %o
|
|
|
+// CHECK-NEXT: [[p4:%\d+]] = OpLoad %float %p
|
|
|
+// CHECK-NEXT: [[q4:%\d+]] = OpFRem %float [[o4]] [[p4]]
|
|
|
+// CHECK-NEXT: OpStore %q [[q4]]
|
|
|
+ q = o % p;
|
|
|
+
|
|
|
+// CHECK-NEXT: [[a5:%\d+]] = OpLoad %int %a
|
|
|
+// CHECK-NEXT: [[b5:%\d+]] = OpLoad %int %b
|
|
|
+// CHECK-NEXT: [[a6:%\d+]] = OpLoad %int %a
|
|
|
+// CHECK-NEXT: [[in0:%\d+]] = OpIMul %int [[b5]] [[a6]]
|
|
|
+// CHECK-NEXT: [[c5:%\d+]] = OpLoad %int %c
|
|
|
+// CHECK-NEXT: [[in1:%\d+]] = OpSDiv %int [[in0]] [[c5]]
|
|
|
+// CHECK-NEXT: [[b6:%\d+]] = OpLoad %int %b
|
|
|
+// CHECK-NEXT: [[in2:%\d+]] = OpSRem %int [[in1]] [[b6]]
|
|
|
+// CHECK-NEXT: [[in3:%\d+]] = OpIAdd %int [[a5]] [[in2]]
|
|
|
+// CHECK-NEXT: OpStore %c [[in3]]
|
|
|
+ c = a + b * a / c % b;
|
|
|
+// CHECK-NEXT: [[i5:%\d+]] = OpLoad %uint %i
|
|
|
+// CHECK-NEXT: [[j5:%\d+]] = OpLoad %uint %j
|
|
|
+// CHECK-NEXT: [[i6:%\d+]] = OpLoad %uint %i
|
|
|
+// CHECK-NEXT: [[in4:%\d+]] = OpIMul %uint [[j5]] [[i6]]
|
|
|
+// CHECK-NEXT: [[k5:%\d+]] = OpLoad %uint %k
|
|
|
+// CHECK-NEXT: [[in5:%\d+]] = OpUDiv %uint [[in4]] [[k5]]
|
|
|
+// CHECK-NEXT: [[j6:%\d+]] = OpLoad %uint %j
|
|
|
+// CHECK-NEXT: [[in6:%\d+]] = OpUMod %uint [[in5]] [[j6]]
|
|
|
+// CHECK-NEXT: [[in7:%\d+]] = OpIAdd %uint [[i5]] [[in6]]
|
|
|
+// CHECK-NEXT: OpStore %k [[in7]]
|
|
|
+ k = i + j * i / k % j;
|
|
|
+// CHECK-NEXT: [[o5:%\d+]] = OpLoad %float %o
|
|
|
+// CHECK-NEXT: [[p5:%\d+]] = OpLoad %float %p
|
|
|
+// CHECK-NEXT: [[o6:%\d+]] = OpLoad %float %o
|
|
|
+// CHECK-NEXT: [[in8:%\d+]] = OpFMul %float [[p5]] [[o6]]
|
|
|
+// CHECK-NEXT: [[q5:%\d+]] = OpLoad %float %q
|
|
|
+// CHECK-NEXT: [[in9:%\d+]] = OpFDiv %float [[in8]] [[q5]]
|
|
|
+// CHECK-NEXT: [[p6:%\d+]] = OpLoad %float %p
|
|
|
+// CHECK-NEXT: [[in10:%\d+]] = OpFRem %float [[in9]] [[p6]]
|
|
|
+// CHECK-NEXT: [[in11:%\d+]] = OpFAdd %float [[o5]] [[in10]]
|
|
|
+// CHECK-NEXT: OpStore %q [[in11]]
|
|
|
+ q = o + p * o / q % p;
|
|
|
+}
|