binary-op.bitwise-assign.vector.hlsl 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Run: %dxc -T vs_6_0 -E main
  2. void main() {
  3. // CHECK-LABEL: %bb_entry = OpLabel
  4. int1 a, b;
  5. uint2 i, j;
  6. // CHECK: [[a0:%\d+]] = OpLoad %int %a
  7. // CHECK-NEXT: [[b0:%\d+]] = OpLoad %int %b
  8. // CHECK-NEXT: [[and0:%\d+]] = OpBitwiseAnd %int [[b0]] [[a0]]
  9. // CHECK-NEXT: OpStore %b [[and0]]
  10. b &= a;
  11. // CHECK-NEXT: [[i0:%\d+]] = OpLoad %v2uint %i
  12. // CHECK-NEXT: [[j0:%\d+]] = OpLoad %v2uint %j
  13. // CHECK-NEXT: [[and1:%\d+]] = OpBitwiseAnd %v2uint [[j0]] [[i0]]
  14. // CHECK-NEXT: OpStore %j [[and1]]
  15. j &= i;
  16. // CHECK-NEXT: [[a1:%\d+]] = OpLoad %int %a
  17. // CHECK-NEXT: [[b1:%\d+]] = OpLoad %int %b
  18. // CHECK-NEXT: [[or0:%\d+]] = OpBitwiseOr %int [[b1]] [[a1]]
  19. // CHECK-NEXT: OpStore %b [[or0]]
  20. b |= a;
  21. // CHECK-NEXT: [[i1:%\d+]] = OpLoad %v2uint %i
  22. // CHECK-NEXT: [[j1:%\d+]] = OpLoad %v2uint %j
  23. // CHECK-NEXT: [[or1:%\d+]] = OpBitwiseOr %v2uint [[j1]] [[i1]]
  24. // CHECK-NEXT: OpStore %j [[or1]]
  25. j |= i;
  26. // CHECK-NEXT: [[a2:%\d+]] = OpLoad %int %a
  27. // CHECK-NEXT: [[b2:%\d+]] = OpLoad %int %b
  28. // CHECK-NEXT: [[xor0:%\d+]] = OpBitwiseXor %int [[b2]] [[a2]]
  29. // CHECK-NEXT: OpStore %b [[xor0]]
  30. b ^= a;
  31. // CHECK-NEXT: [[i2:%\d+]] = OpLoad %v2uint %i
  32. // CHECK-NEXT: [[j2:%\d+]] = OpLoad %v2uint %j
  33. // CHECK-NEXT: [[xor1:%\d+]] = OpBitwiseXor %v2uint [[j2]] [[i2]]
  34. // CHECK-NEXT: OpStore %j [[xor1]]
  35. j ^= i;
  36. // CHECK-NEXT: [[a3:%\d+]] = OpLoad %int %a
  37. // CHECK-NEXT: [[b3:%\d+]] = OpLoad %int %b
  38. // CHECK-NEXT: [[shl0:%\d+]] = OpShiftLeftLogical %int [[b3]] [[a3]]
  39. // CHECK-NEXT: OpStore %b [[shl0]]
  40. b <<= a;
  41. // CHECK-NEXT: [[i3:%\d+]] = OpLoad %v2uint %i
  42. // CHECK-NEXT: [[j3:%\d+]] = OpLoad %v2uint %j
  43. // CHECK-NEXT: [[shl1:%\d+]] = OpShiftLeftLogical %v2uint [[j3]] [[i3]]
  44. // CHECK-NEXT: OpStore %j [[shl1]]
  45. j <<= i;
  46. // CHECK-NEXT: [[a4:%\d+]] = OpLoad %int %a
  47. // CHECK-NEXT: [[b4:%\d+]] = OpLoad %int %b
  48. // CHECK-NEXT: [[shr0:%\d+]] = OpShiftRightArithmetic %int [[b4]] [[a4]]
  49. // CHECK-NEXT: OpStore %b [[shr0]]
  50. b >>= a;
  51. // CHECK-NEXT: [[i4:%\d+]] = OpLoad %v2uint %i
  52. // CHECK-NEXT: [[j4:%\d+]] = OpLoad %v2uint %j
  53. // CHECK-NEXT: [[shr1:%\d+]] = OpShiftRightLogical %v2uint [[j4]] [[i4]]
  54. // CHECK-NEXT: OpStore %j [[shr1]]
  55. j >>= i;
  56. }