2
0

array_of_structs_opt.hlsl 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // RUN: %dxc -E main -T vs_6_0 -Zi %s | FileCheck %s
  2. // Check that debug info is preserved for arrays of structs
  3. // getting SROA'd down into arrays of struct elements,
  4. // then SROA'd into individual allocas and promoted to registers,
  5. // when compiling with optimizations.
  6. // CHECK-DAG: %[[i1:.*]] = extractvalue %dx.types.CBufRet.i32 %{{.*}}, 0
  7. // CHECK-DAG: %[[f1:.*]] = extractvalue %dx.types.CBufRet.f32 %{{.*}}, 1
  8. // CHECK-DAG: %[[i2:.*]] = extractvalue %dx.types.CBufRet.i32 %{{.*}}, 2
  9. // CHECK-DAG: %[[f2:.*]] = extractvalue %dx.types.CBufRet.f32 %{{.*}}, 3
  10. // CHECK-DAG: call void @llvm.dbg.value(metadata i32 %[[i1]], i64 0, metadata !{{.*}}, metadata ![[i1expr:.*]])
  11. // CHECK-DAG: call void @llvm.dbg.value(metadata float %[[f1]], i64 0, metadata !{{.*}}, metadata ![[f1expr:.*]])
  12. // CHECK-DAG: call void @llvm.dbg.value(metadata i32 %[[i2]], i64 0, metadata !{{.*}}, metadata ![[i2expr:.*]])
  13. // CHECK-DAG: call void @llvm.dbg.value(metadata float %[[f2]], i64 0, metadata !{{.*}}, metadata ![[f2expr:.*]])
  14. // Exclude quoted source file (see readme)
  15. // CHECK-LABEL: {{!"[^"]*\\0A[^"]*"}}
  16. // CHECK-DAG: !DILocalVariable(tag: DW_TAG_auto_variable, name: "var"
  17. // CHECK-DAG: ![[i1expr]] = !DIExpression(DW_OP_bit_piece, 0, 32)
  18. // CHECK-DAG: ![[f1expr]] = !DIExpression(DW_OP_bit_piece, 32, 32)
  19. // CHECK-DAG: ![[i2expr]] = !DIExpression(DW_OP_bit_piece, 64, 32)
  20. // CHECK-DAG: ![[f2expr]] = !DIExpression(DW_OP_bit_piece, 96, 32)
  21. struct intfloat { int i; float f; };
  22. int cb_i1; float cb_f1;
  23. int cb_i2; float cb_f2;
  24. void main(
  25. out int o_i1 : I1, out float o_f1 : F1,
  26. out int o_i2 : I2, out float o_f2 : F2)
  27. {
  28. intfloat var[2] = { cb_i1, cb_f1, cb_i2, cb_f2 };
  29. o_i1 = var[0].i; o_f1 = var[0].f;
  30. o_i2 = var[1].i; o_f2 = var[1].f;
  31. }