[PATCH] D91278: [Clang][CodeGen][RISCV] Fix hard float ABI for struct with empty struct and complex
lenary accepted this revision. lenary added a comment. LGTM Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D91278/new/ https://reviews.llvm.org/D91278 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D91278: [Clang][CodeGen][RISCV] Fix hard float ABI for struct with empty struct and complex
luismarques updated this revision to Diff 309991. luismarques added a comment. Add float Complex case, for regression test completeness. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D91278/new/ https://reviews.llvm.org/D91278 Files: clang/lib/CodeGen/TargetInfo.cpp clang/test/CodeGen/riscv32-ilp32d-abi.cpp Index: clang/test/CodeGen/riscv32-ilp32d-abi.cpp === --- clang/test/CodeGen/riscv32-ilp32d-abi.cpp +++ clang/test/CodeGen/riscv32-ilp32d-abi.cpp @@ -32,3 +32,19 @@ double f_empty_double_float(empty_double_float a) { return a.g; } + +struct empty_complex_f { struct {}; float _Complex fc; }; + +// CHECK: define float @_Z17f_empty_complex_f15empty_complex_f(float %0, float %1) +// CHECK: { [4 x i8], float, float } +float f_empty_complex_f(empty_complex_f a) { +return __imag__ a.fc; +} + +struct empty_complex_d { struct {}; double _Complex fc; }; + +// CHECK: define double @_Z17f_empty_complex_d15empty_complex_d(double %0, double %1) +// CHECK: { [8 x i8], double, double } +double f_empty_complex_d(empty_complex_d a) { +return __imag__ a.fc; +} Index: clang/lib/CodeGen/TargetInfo.cpp === --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -10469,7 +10469,6 @@ return false; Field1Ty = CGT.ConvertType(EltTy); Field1Off = CurOff; -assert(CurOff.isZero() && "Unexpected offset for first field"); Field2Ty = Field1Ty; Field2Off = Field1Off + getContext().getTypeSizeInChars(EltTy); return true; Index: clang/test/CodeGen/riscv32-ilp32d-abi.cpp === --- clang/test/CodeGen/riscv32-ilp32d-abi.cpp +++ clang/test/CodeGen/riscv32-ilp32d-abi.cpp @@ -32,3 +32,19 @@ double f_empty_double_float(empty_double_float a) { return a.g; } + +struct empty_complex_f { struct {}; float _Complex fc; }; + +// CHECK: define float @_Z17f_empty_complex_f15empty_complex_f(float %0, float %1) +// CHECK: { [4 x i8], float, float } +float f_empty_complex_f(empty_complex_f a) { +return __imag__ a.fc; +} + +struct empty_complex_d { struct {}; double _Complex fc; }; + +// CHECK: define double @_Z17f_empty_complex_d15empty_complex_d(double %0, double %1) +// CHECK: { [8 x i8], double, double } +double f_empty_complex_d(empty_complex_d a) { +return __imag__ a.fc; +} Index: clang/lib/CodeGen/TargetInfo.cpp === --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -10469,7 +10469,6 @@ return false; Field1Ty = CGT.ConvertType(EltTy); Field1Off = CurOff; -assert(CurOff.isZero() && "Unexpected offset for first field"); Field2Ty = Field1Ty; Field2Off = Field1Off + getContext().getTypeSizeInChars(EltTy); return true; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D91278: [Clang][CodeGen][RISCV] Fix hard float ABI for struct with empty struct and complex
lenary added a comment. LGTM - the big hint is that the new test is handled the same as `f_empty_double2` as required by the ABI. Comment at: clang/test/CodeGen/riscv32-ilp32d-abi.cpp:36 + +struct empty_complex { struct {}; double _Complex fc; }; + Please can you add a test of `{ struct {}; float _Complex fc;}` too, just for regression purposes? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D91278/new/ https://reviews.llvm.org/D91278 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D91278: [Clang][CodeGen][RISCV] Fix hard float ABI for struct with empty struct and complex
luismarques updated this revision to Diff 304554. luismarques added a comment. Fix bad test. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D91278/new/ https://reviews.llvm.org/D91278 Files: clang/lib/CodeGen/TargetInfo.cpp clang/test/CodeGen/riscv32-ilp32d-abi.cpp Index: clang/test/CodeGen/riscv32-ilp32d-abi.cpp === --- clang/test/CodeGen/riscv32-ilp32d-abi.cpp +++ clang/test/CodeGen/riscv32-ilp32d-abi.cpp @@ -32,3 +32,11 @@ double f_empty_double_float(empty_double_float a) { return a.g; } + +struct empty_complex { struct {}; double _Complex fc; }; + +// CHECK: define double @_Z15f_empty_complex13empty_complex(double %0, double %1) +// CHECK: { [8 x i8], double, double } +double f_empty_complex(empty_complex a) { +return __imag__ a.fc; +} Index: clang/lib/CodeGen/TargetInfo.cpp === --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -10479,7 +10479,6 @@ return false; Field1Ty = CGT.ConvertType(EltTy); Field1Off = CurOff; -assert(CurOff.isZero() && "Unexpected offset for first field"); Field2Ty = Field1Ty; Field2Off = Field1Off + getContext().getTypeSizeInChars(EltTy); return true; Index: clang/test/CodeGen/riscv32-ilp32d-abi.cpp === --- clang/test/CodeGen/riscv32-ilp32d-abi.cpp +++ clang/test/CodeGen/riscv32-ilp32d-abi.cpp @@ -32,3 +32,11 @@ double f_empty_double_float(empty_double_float a) { return a.g; } + +struct empty_complex { struct {}; double _Complex fc; }; + +// CHECK: define double @_Z15f_empty_complex13empty_complex(double %0, double %1) +// CHECK: { [8 x i8], double, double } +double f_empty_complex(empty_complex a) { +return __imag__ a.fc; +} Index: clang/lib/CodeGen/TargetInfo.cpp === --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -10479,7 +10479,6 @@ return false; Field1Ty = CGT.ConvertType(EltTy); Field1Off = CurOff; -assert(CurOff.isZero() && "Unexpected offset for first field"); Field2Ty = Field1Ty; Field2Off = Field1Off + getContext().getTypeSizeInChars(EltTy); return true; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D91278: [Clang][CodeGen][RISCV] Fix hard float ABI for struct with empty struct and complex
luismarques created this revision. luismarques added reviewers: asb, lenary, rjmccall, efriedma. Herald added subscribers: cfe-commits, frasercrmck, NickHung, evandro, apazos, sameer.abuasal, pzheng, s.egerton, Jim, benna, psnobl, jocewei, PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, shiva0217, kito-cheng, niosHD, sabuasal, simoncook, johnrusso, rbar. Herald added a project: clang. luismarques requested review of this revision. Fixes bug 44904. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D91278 Files: clang/lib/CodeGen/TargetInfo.cpp clang/test/CodeGen/riscv32-ilp32d-abi.cpp Index: clang/test/CodeGen/riscv32-ilp32d-abi.cpp === --- clang/test/CodeGen/riscv32-ilp32d-abi.cpp +++ clang/test/CodeGen/riscv32-ilp32d-abi.cpp @@ -32,3 +32,11 @@ double f_empty_double_float(empty_double_float a) { return a.g; } + +struct empty_complex { struct {}; double _Complex fc; }; + +// CHECK: define double @_Z20f_empty_double_float13empty_complex(double %0, double %1) +// CHECK: { [8 x i8], double, double } +double f_empty_double_float(empty_complex a) { +return __imag__ a.fc; +} Index: clang/lib/CodeGen/TargetInfo.cpp === --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -10479,7 +10479,6 @@ return false; Field1Ty = CGT.ConvertType(EltTy); Field1Off = CurOff; -assert(CurOff.isZero() && "Unexpected offset for first field"); Field2Ty = Field1Ty; Field2Off = Field1Off + getContext().getTypeSizeInChars(EltTy); return true; Index: clang/test/CodeGen/riscv32-ilp32d-abi.cpp === --- clang/test/CodeGen/riscv32-ilp32d-abi.cpp +++ clang/test/CodeGen/riscv32-ilp32d-abi.cpp @@ -32,3 +32,11 @@ double f_empty_double_float(empty_double_float a) { return a.g; } + +struct empty_complex { struct {}; double _Complex fc; }; + +// CHECK: define double @_Z20f_empty_double_float13empty_complex(double %0, double %1) +// CHECK: { [8 x i8], double, double } +double f_empty_double_float(empty_complex a) { +return __imag__ a.fc; +} Index: clang/lib/CodeGen/TargetInfo.cpp === --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -10479,7 +10479,6 @@ return false; Field1Ty = CGT.ConvertType(EltTy); Field1Off = CurOff; -assert(CurOff.isZero() && "Unexpected offset for first field"); Field2Ty = Field1Ty; Field2Off = Field1Off + getContext().getTypeSizeInChars(EltTy); return true; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits