binary-op.arithmetic.scalar.hlsl 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. // Run: %dxc -T ps_6_0 -E main
  2. void main() {
  3. int a, b, c;
  4. uint i, j, k;
  5. float o, p, q;
  6. // CHECK: [[a0:%\d+]] = OpLoad %int %a
  7. // CHECK-NEXT: [[b0:%\d+]] = OpLoad %int %b
  8. // CHECK-NEXT: [[c0:%\d+]] = OpIAdd %int [[a0]] [[b0]]
  9. // CHECK-NEXT: OpStore %c [[c0]]
  10. c = a + b;
  11. // CHECK-NEXT: [[i0:%\d+]] = OpLoad %uint %i
  12. // CHECK-NEXT: [[j0:%\d+]] = OpLoad %uint %j
  13. // CHECK-NEXT: [[k0:%\d+]] = OpIAdd %uint [[i0]] [[j0]]
  14. // CHECK-NEXT: OpStore %k [[k0]]
  15. k = i + j;
  16. // CHECK-NEXT: [[o0:%\d+]] = OpLoad %float %o
  17. // CHECK-NEXT: [[p0:%\d+]] = OpLoad %float %p
  18. // CHECK-NEXT: [[q0:%\d+]] = OpFAdd %float [[o0]] [[p0]]
  19. // CHECK-NEXT: OpStore %q [[q0]]
  20. q = o + p;
  21. // CHECK-NEXT: [[a1:%\d+]] = OpLoad %int %a
  22. // CHECK-NEXT: [[b1:%\d+]] = OpLoad %int %b
  23. // CHECK-NEXT: [[c1:%\d+]] = OpISub %int [[a1]] [[b1]]
  24. // CHECK-NEXT: OpStore %c [[c1]]
  25. c = a - b;
  26. // CHECK-NEXT: [[i1:%\d+]] = OpLoad %uint %i
  27. // CHECK-NEXT: [[j1:%\d+]] = OpLoad %uint %j
  28. // CHECK-NEXT: [[k1:%\d+]] = OpISub %uint [[i1]] [[j1]]
  29. // CHECK-NEXT: OpStore %k [[k1]]
  30. k = i - j;
  31. // CHECK-NEXT: [[o1:%\d+]] = OpLoad %float %o
  32. // CHECK-NEXT: [[p1:%\d+]] = OpLoad %float %p
  33. // CHECK-NEXT: [[q1:%\d+]] = OpFSub %float [[o1]] [[p1]]
  34. // CHECK-NEXT: OpStore %q [[q1]]
  35. q = o - p;
  36. // CHECK-NEXT: [[a2:%\d+]] = OpLoad %int %a
  37. // CHECK-NEXT: [[b2:%\d+]] = OpLoad %int %b
  38. // CHECK-NEXT: [[c2:%\d+]] = OpIMul %int [[a2]] [[b2]]
  39. // CHECK-NEXT: OpStore %c [[c2]]
  40. c = a * b;
  41. // CHECK-NEXT: [[i2:%\d+]] = OpLoad %uint %i
  42. // CHECK-NEXT: [[j2:%\d+]] = OpLoad %uint %j
  43. // CHECK-NEXT: [[k2:%\d+]] = OpIMul %uint [[i2]] [[j2]]
  44. // CHECK-NEXT: OpStore %k [[k2]]
  45. k = i * j;
  46. // CHECK-NEXT: [[o2:%\d+]] = OpLoad %float %o
  47. // CHECK-NEXT: [[p2:%\d+]] = OpLoad %float %p
  48. // CHECK-NEXT: [[q2:%\d+]] = OpFMul %float [[o2]] [[p2]]
  49. // CHECK-NEXT: OpStore %q [[q2]]
  50. q = o * p;
  51. // CHECK-NEXT: [[a3:%\d+]] = OpLoad %int %a
  52. // CHECK-NEXT: [[b3:%\d+]] = OpLoad %int %b
  53. // CHECK-NEXT: [[c3:%\d+]] = OpSDiv %int [[a3]] [[b3]]
  54. // CHECK-NEXT: OpStore %c [[c3]]
  55. c = a / b;
  56. // CHECK-NEXT: [[i3:%\d+]] = OpLoad %uint %i
  57. // CHECK-NEXT: [[j3:%\d+]] = OpLoad %uint %j
  58. // CHECK-NEXT: [[k3:%\d+]] = OpUDiv %uint [[i3]] [[j3]]
  59. // CHECK-NEXT: OpStore %k [[k3]]
  60. k = i / j;
  61. // CHECK-NEXT: [[o3:%\d+]] = OpLoad %float %o
  62. // CHECK-NEXT: [[p3:%\d+]] = OpLoad %float %p
  63. // CHECK-NEXT: [[q3:%\d+]] = OpFDiv %float [[o3]] [[p3]]
  64. // CHECK-NEXT: OpStore %q [[q3]]
  65. q = o / p;
  66. // CHECK-NEXT: [[a4:%\d+]] = OpLoad %int %a
  67. // CHECK-NEXT: [[b4:%\d+]] = OpLoad %int %b
  68. // CHECK-NEXT: [[c4:%\d+]] = OpSRem %int [[a4]] [[b4]]
  69. // CHECK-NEXT: OpStore %c [[c4]]
  70. c = a % b;
  71. // CHECK-NEXT: [[i4:%\d+]] = OpLoad %uint %i
  72. // CHECK-NEXT: [[j4:%\d+]] = OpLoad %uint %j
  73. // CHECK-NEXT: [[k4:%\d+]] = OpUMod %uint [[i4]] [[j4]]
  74. // CHECK-NEXT: OpStore %k [[k4]]
  75. k = i % j;
  76. // CHECK-NEXT: [[o4:%\d+]] = OpLoad %float %o
  77. // CHECK-NEXT: [[p4:%\d+]] = OpLoad %float %p
  78. // CHECK-NEXT: [[q4:%\d+]] = OpFRem %float [[o4]] [[p4]]
  79. // CHECK-NEXT: OpStore %q [[q4]]
  80. q = o % p;
  81. // CHECK-NEXT: [[a5:%\d+]] = OpLoad %int %a
  82. // CHECK-NEXT: [[b5:%\d+]] = OpLoad %int %b
  83. // CHECK-NEXT: [[a6:%\d+]] = OpLoad %int %a
  84. // CHECK-NEXT: [[in0:%\d+]] = OpIMul %int [[b5]] [[a6]]
  85. // CHECK-NEXT: [[c5:%\d+]] = OpLoad %int %c
  86. // CHECK-NEXT: [[in1:%\d+]] = OpSDiv %int [[in0]] [[c5]]
  87. // CHECK-NEXT: [[b6:%\d+]] = OpLoad %int %b
  88. // CHECK-NEXT: [[in2:%\d+]] = OpSRem %int [[in1]] [[b6]]
  89. // CHECK-NEXT: [[in3:%\d+]] = OpIAdd %int [[a5]] [[in2]]
  90. // CHECK-NEXT: OpStore %c [[in3]]
  91. c = a + b * a / c % b;
  92. // CHECK-NEXT: [[i5:%\d+]] = OpLoad %uint %i
  93. // CHECK-NEXT: [[j5:%\d+]] = OpLoad %uint %j
  94. // CHECK-NEXT: [[i6:%\d+]] = OpLoad %uint %i
  95. // CHECK-NEXT: [[in4:%\d+]] = OpIMul %uint [[j5]] [[i6]]
  96. // CHECK-NEXT: [[k5:%\d+]] = OpLoad %uint %k
  97. // CHECK-NEXT: [[in5:%\d+]] = OpUDiv %uint [[in4]] [[k5]]
  98. // CHECK-NEXT: [[j6:%\d+]] = OpLoad %uint %j
  99. // CHECK-NEXT: [[in6:%\d+]] = OpUMod %uint [[in5]] [[j6]]
  100. // CHECK-NEXT: [[in7:%\d+]] = OpIAdd %uint [[i5]] [[in6]]
  101. // CHECK-NEXT: OpStore %k [[in7]]
  102. k = i + j * i / k % j;
  103. // CHECK-NEXT: [[o5:%\d+]] = OpLoad %float %o
  104. // CHECK-NEXT: [[p5:%\d+]] = OpLoad %float %p
  105. // CHECK-NEXT: [[o6:%\d+]] = OpLoad %float %o
  106. // CHECK-NEXT: [[in8:%\d+]] = OpFMul %float [[p5]] [[o6]]
  107. // CHECK-NEXT: [[q5:%\d+]] = OpLoad %float %q
  108. // CHECK-NEXT: [[in9:%\d+]] = OpFDiv %float [[in8]] [[q5]]
  109. // CHECK-NEXT: [[p6:%\d+]] = OpLoad %float %p
  110. // CHECK-NEXT: [[in10:%\d+]] = OpFRem %float [[in9]] [[p6]]
  111. // CHECK-NEXT: [[in11:%\d+]] = OpFAdd %float [[o5]] [[in10]]
  112. // CHECK-NEXT: OpStore %q [[in11]]
  113. q = o + p * o / q % p;
  114. }