binary-op.bitwise.vector.hlsl 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Run: %dxc -T vs_6_0 -E main
  2. void main() {
  3. // CHECK-LABEL: %bb_entry = OpLabel
  4. int1 a, b, c;
  5. uint3 i, j, k;
  6. // CHECK: [[a0:%\d+]] = OpLoad %int %a
  7. // CHECK-NEXT: [[b0:%\d+]] = OpLoad %int %b
  8. // CHECK-NEXT: [[c0:%\d+]] = OpBitwiseAnd %int [[a0]] [[b0]]
  9. // CHECK-NEXT: OpStore %c [[c0]]
  10. c = a & b;
  11. // CHECK-NEXT: [[i0:%\d+]] = OpLoad %v3uint %i
  12. // CHECK-NEXT: [[j0:%\d+]] = OpLoad %v3uint %j
  13. // CHECK-NEXT: [[k0:%\d+]] = OpBitwiseAnd %v3uint [[i0]] [[j0]]
  14. // CHECK-NEXT: OpStore %k [[k0]]
  15. k = i & j;
  16. // CHECK-NEXT: [[a1:%\d+]] = OpLoad %int %a
  17. // CHECK-NEXT: [[b1:%\d+]] = OpLoad %int %b
  18. // CHECK-NEXT: [[c1:%\d+]] = OpBitwiseOr %int [[a1]] [[b1]]
  19. // CHECK-NEXT: OpStore %c [[c1]]
  20. c = a | b;
  21. // CHECK-NEXT: [[i1:%\d+]] = OpLoad %v3uint %i
  22. // CHECK-NEXT: [[j1:%\d+]] = OpLoad %v3uint %j
  23. // CHECK-NEXT: [[k1:%\d+]] = OpBitwiseOr %v3uint [[i1]] [[j1]]
  24. // CHECK-NEXT: OpStore %k [[k1]]
  25. k = i | j;
  26. // CHECK-NEXT: [[a2:%\d+]] = OpLoad %int %a
  27. // CHECK-NEXT: [[b2:%\d+]] = OpLoad %int %b
  28. // CHECK-NEXT: [[c2:%\d+]] = OpBitwiseXor %int [[a2]] [[b2]]
  29. // CHECK-NEXT: OpStore %c [[c2]]
  30. c = a ^ b;
  31. // CHECK-NEXT: [[i2:%\d+]] = OpLoad %v3uint %i
  32. // CHECK-NEXT: [[j2:%\d+]] = OpLoad %v3uint %j
  33. // CHECK-NEXT: [[k2:%\d+]] = OpBitwiseXor %v3uint [[i2]] [[j2]]
  34. // CHECK-NEXT: OpStore %k [[k2]]
  35. k = i ^ j;
  36. // CHECK-NEXT: [[a3:%\d+]] = OpLoad %int %a
  37. // CHECK-NEXT: [[b3:%\d+]] = OpLoad %int %b
  38. // CHECK-NEXT: [[c3:%\d+]] = OpShiftLeftLogical %int [[a3]] [[b3]]
  39. // CHECK-NEXT: OpStore %c [[c3]]
  40. c = a << b;
  41. // CHECK-NEXT: [[i3:%\d+]] = OpLoad %v3uint %i
  42. // CHECK-NEXT: [[j3:%\d+]] = OpLoad %v3uint %j
  43. // CHECK-NEXT: [[k3:%\d+]] = OpShiftLeftLogical %v3uint [[i3]] [[j3]]
  44. // CHECK-NEXT: OpStore %k [[k3]]
  45. k = i << j;
  46. // CHECK-NEXT: [[a4:%\d+]] = OpLoad %int %a
  47. // CHECK-NEXT: [[b4:%\d+]] = OpLoad %int %b
  48. // CHECK-NEXT: [[c4:%\d+]] = OpShiftRightArithmetic %int [[a4]] [[b4]]
  49. // CHECK-NEXT: OpStore %c [[c4]]
  50. c = a >> b;
  51. // CHECK-NEXT: [[i4:%\d+]] = OpLoad %v3uint %i
  52. // CHECK-NEXT: [[j4:%\d+]] = OpLoad %v3uint %j
  53. // CHECK-NEXT: [[k4:%\d+]] = OpShiftRightLogical %v3uint [[i4]] [[j4]]
  54. // CHECK-NEXT: OpStore %k [[k4]]
  55. k = i >> j;
  56. // CHECK-NEXT: [[a5:%\d+]] = OpLoad %int %a
  57. // CHECK-NEXT: [[b5:%\d+]] = OpNot %int [[a5]]
  58. // CHECK-NEXT: OpStore %b [[b5]]
  59. b = ~a;
  60. // CHECK-NEXT: [[i5:%\d+]] = OpLoad %v3uint %i
  61. // CHECK-NEXT: [[j5:%\d+]] = OpNot %v3uint [[i5]]
  62. // CHECK-NEXT: OpStore %j [[j5]]
  63. j = ~i;
  64. }