binary-op.arithmetic.vector.hlsl 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Run: %dxc -T vs_6_0 -E main
  2. void main() {
  3. // CHECK-LABEL: %bb_entry = OpLabel
  4. int1 a, b, c;
  5. int2 i, j, k;
  6. uint3 o, p, q;
  7. float4 x, y, z;
  8. // CHECK: [[a0:%\d+]] = OpLoad %int %a
  9. // CHECK-NEXT: [[b0:%\d+]] = OpLoad %int %b
  10. // CHECK-NEXT: [[add0:%\d+]] = OpIAdd %int [[a0]] [[b0]]
  11. // CHECK-NEXT: OpStore %c [[add0]]
  12. c = a + b;
  13. // CHECK-NEXT: [[i0:%\d+]] = OpLoad %v2int %i
  14. // CHECK-NEXT: [[j0:%\d+]] = OpLoad %v2int %j
  15. // CHECK-NEXT: [[add1:%\d+]] = OpIAdd %v2int [[i0]] [[j0]]
  16. // CHECK-NEXT: OpStore %k [[add1]]
  17. k = i + j;
  18. // CHECK-NEXT: [[o0:%\d+]] = OpLoad %v3uint %o
  19. // CHECK-NEXT: [[p0:%\d+]] = OpLoad %v3uint %p
  20. // CHECK-NEXT: [[add2:%\d+]] = OpIAdd %v3uint [[o0]] [[p0]]
  21. // CHECK-NEXT: OpStore %q [[add2]]
  22. q = o + p;
  23. // CHECK-NEXT: [[x0:%\d+]] = OpLoad %v4float %x
  24. // CHECK-NEXT: [[z0:%\d+]] = OpLoad %v4float %y
  25. // CHECK-NEXT: [[add3:%\d+]] = OpFAdd %v4float [[x0]] [[z0]]
  26. // CHECK-NEXT: OpStore %z [[add3]]
  27. z = x + y;
  28. // CHECK-NEXT: [[a1:%\d+]] = OpLoad %int %a
  29. // CHECK-NEXT: [[b1:%\d+]] = OpLoad %int %b
  30. // CHECK-NEXT: [[sub0:%\d+]] = OpISub %int [[a1]] [[b1]]
  31. // CHECK-NEXT: OpStore %c [[sub0]]
  32. c = a - b;
  33. // CHECK-NEXT: [[i1:%\d+]] = OpLoad %v2int %i
  34. // CHECK-NEXT: [[j1:%\d+]] = OpLoad %v2int %j
  35. // CHECK-NEXT: [[sub1:%\d+]] = OpISub %v2int [[i1]] [[j1]]
  36. // CHECK-NEXT: OpStore %k [[sub1]]
  37. k = i - j;
  38. // CHECK-NEXT: [[o1:%\d+]] = OpLoad %v3uint %o
  39. // CHECK-NEXT: [[p1:%\d+]] = OpLoad %v3uint %p
  40. // CHECK-NEXT: [[sub2:%\d+]] = OpISub %v3uint [[o1]] [[p1]]
  41. // CHECK-NEXT: OpStore %q [[sub2]]
  42. q = o - p;
  43. // CHECK-NEXT: [[x1:%\d+]] = OpLoad %v4float %x
  44. // CHECK-NEXT: [[y1:%\d+]] = OpLoad %v4float %y
  45. // CHECK-NEXT: [[sub3:%\d+]] = OpFSub %v4float [[x1]] [[y1]]
  46. // CHECK-NEXT: OpStore %z [[sub3]]
  47. z = x - y;
  48. // CHECK-NEXT: [[a2:%\d+]] = OpLoad %int %a
  49. // CHECK-NEXT: [[b2:%\d+]] = OpLoad %int %b
  50. // CHECK-NEXT: [[mul0:%\d+]] = OpIMul %int [[a2]] [[b2]]
  51. // CHECK-NEXT: OpStore %c [[mul0]]
  52. c = a * b;
  53. // CHECK-NEXT: [[i2:%\d+]] = OpLoad %v2int %i
  54. // CHECK-NEXT: [[j2:%\d+]] = OpLoad %v2int %j
  55. // CHECK-NEXT: [[mul1:%\d+]] = OpIMul %v2int [[i2]] [[j2]]
  56. // CHECK-NEXT: OpStore %k [[mul1]]
  57. k = i * j;
  58. // CHECK-NEXT: [[o2:%\d+]] = OpLoad %v3uint %o
  59. // CHECK-NEXT: [[p2:%\d+]] = OpLoad %v3uint %p
  60. // CHECK-NEXT: [[mul2:%\d+]] = OpIMul %v3uint [[o2]] [[p2]]
  61. // CHECK-NEXT: OpStore %q [[mul2]]
  62. q = o * p;
  63. // CHECK-NEXT: [[x2:%\d+]] = OpLoad %v4float %x
  64. // CHECK-NEXT: [[y2:%\d+]] = OpLoad %v4float %y
  65. // CHECK-NEXT: [[mul3:%\d+]] = OpFMul %v4float [[x2]] [[y2]]
  66. // CHECK-NEXT: OpStore %z [[mul3]]
  67. z = x * y;
  68. // CHECK-NEXT: [[a4:%\d+]] = OpLoad %int %a
  69. // CHECK-NEXT: [[b4:%\d+]] = OpLoad %int %b
  70. // CHECK-NEXT: [[div0:%\d+]] = OpSDiv %int [[a4]] [[b4]]
  71. // CHECK-NEXT: OpStore %c [[div0]]
  72. c = a / b;
  73. // CHECK-NEXT: [[i4:%\d+]] = OpLoad %v2int %i
  74. // CHECK-NEXT: [[j4:%\d+]] = OpLoad %v2int %j
  75. // CHECK-NEXT: [[div1:%\d+]] = OpSDiv %v2int [[i4]] [[j4]]
  76. // CHECK-NEXT: OpStore %k [[div1]]
  77. k = i / j;
  78. // CHECK-NEXT: [[o4:%\d+]] = OpLoad %v3uint %o
  79. // CHECK-NEXT: [[p4:%\d+]] = OpLoad %v3uint %p
  80. // CHECK-NEXT: [[div2:%\d+]] = OpUDiv %v3uint [[o4]] [[p4]]
  81. // CHECK-NEXT: OpStore %q [[div2]]
  82. q = o / p;
  83. // CHECK-NEXT: [[x4:%\d+]] = OpLoad %v4float %x
  84. // CHECK-NEXT: [[y4:%\d+]] = OpLoad %v4float %y
  85. // CHECK-NEXT: [[div3:%\d+]] = OpFDiv %v4float [[x4]] [[y4]]
  86. // CHECK-NEXT: OpStore %z [[div3]]
  87. z = x / y;
  88. // CHECK-NEXT: [[a5:%\d+]] = OpLoad %int %a
  89. // CHECK-NEXT: [[b5:%\d+]] = OpLoad %int %b
  90. // CHECK-NEXT: [[mod0:%\d+]] = OpSRem %int [[a5]] [[b5]]
  91. // CHECK-NEXT: OpStore %c [[mod0]]
  92. c = a % b;
  93. // CHECK-NEXT: [[i5:%\d+]] = OpLoad %v2int %i
  94. // CHECK-NEXT: [[j5:%\d+]] = OpLoad %v2int %j
  95. // CHECK-NEXT: [[mod1:%\d+]] = OpSRem %v2int [[i5]] [[j5]]
  96. // CHECK-NEXT: OpStore %k [[mod1]]
  97. k = i % j;
  98. // CHECK-NEXT: [[o5:%\d+]] = OpLoad %v3uint %o
  99. // CHECK-NEXT: [[p5:%\d+]] = OpLoad %v3uint %p
  100. // CHECK-NEXT: [[mod2:%\d+]] = OpUMod %v3uint [[o5]] [[p5]]
  101. // CHECK-NEXT: OpStore %q [[mod2]]
  102. q = o % p;
  103. // CHECK-NEXT: [[x5:%\d+]] = OpLoad %v4float %x
  104. // CHECK-NEXT: [[y5:%\d+]] = OpLoad %v4float %y
  105. // CHECK-NEXT: [[mod3:%\d+]] = OpFRem %v4float [[x5]] [[y5]]
  106. // CHECK-NEXT: OpStore %z [[mod3]]
  107. z = x % y;
  108. }