binary-op.assign.hlsl 956 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // Run: %dxc -T ps_6_0 -E main
  2. struct S {
  3. float x;
  4. };
  5. struct T {
  6. float y;
  7. S z;
  8. };
  9. void main() {
  10. int a, b, c;
  11. // CHECK: [[b0:%\d+]] = OpLoad %int %b
  12. // CHECK-NEXT: OpStore %a [[b0]]
  13. a = b;
  14. // CHECK-NEXT: [[c0:%\d+]] = OpLoad %int %c
  15. // CHECK-NEXT: OpStore %b [[c0]]
  16. // CHECK-NEXT: OpStore %a [[c0]]
  17. a = b = c;
  18. // CHECK-NEXT: [[a0:%\d+]] = OpLoad %int %a
  19. // CHECK-NEXT: OpStore %a [[a0]]
  20. a = a;
  21. // CHECK-NEXT: [[a1:%\d+]] = OpLoad %int %a
  22. // CHECK-NEXT: OpStore %a [[a1]]
  23. // CHECK-NEXT: OpStore %a [[a1]]
  24. a = a = a;
  25. T p, q;
  26. // CHECK-NEXT: [[q:%\d+]] = OpLoad %T %q
  27. // CHECK-NEXT: OpStore %p [[q]]
  28. p = q; // assign as a whole
  29. // CHECK-NEXT: [[q1ptr:%\d+]] = OpAccessChain %_ptr_Function_S %q %int_1
  30. // CHECK-NEXT: [[q1val:%\d+]] = OpLoad %S [[q1ptr]]
  31. // CHECK-NEXT: [[p1ptr:%\d+]] = OpAccessChain %_ptr_Function_S %p %int_1
  32. // CHECK-NEXT: OpStore [[p1ptr]] [[q1val]]
  33. p.z = q.z; // assign nested struct
  34. }