diff options
| author | Sam Elliott <selliott@lowrisc.org> | 2019-08-27 15:41:16 +0000 |
|---|---|---|
| committer | Sam Elliott <selliott@lowrisc.org> | 2019-08-27 15:41:16 +0000 |
| commit | f260630e8f4c07613c11ea9f4b884e58c9683f03 (patch) | |
| tree | 45dbe72391ec0653f25b48f78136f0ad5a38cfb9 /clang/lib/Basic | |
| parent | 70e158e09e9de810dc3254895eecb21bb336bc27 (diff) | |
| download | bcm5719-llvm-f260630e8f4c07613c11ea9f4b884e58c9683f03.tar.gz bcm5719-llvm-f260630e8f4c07613c11ea9f4b884e58c9683f03.zip | |
[RISCV] Set MaxAtomicInlineWidth and MaxAtomicPromoteWidth for RV32/RV64 targets with atomics
Summary: This ensures that libcalls aren't generated when the target supports atomics. Atomics aren't in the base RV32I/RV64I instruction sets, so MaxAtomicInlineWidth and MaxAtomicPromoteWidth are set only when the atomics extension is being targeted. This must be done in setMaxAtomicWidth, as this should be done after handleTargetFeatures has been called.
Reviewers: jfb, jyknight, wmi, asb
Reviewed By: asb
Subscribers: pzheng, MaskRay, s.egerton, lenary, dexonsmith, psnobl, benna, Jim, JohnLLVM, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, kito-cheng, shiva0217, jrtc27, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, lewis-revill, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D57450
llvm-svn: 370073
Diffstat (limited to 'clang/lib/Basic')
| -rw-r--r-- | clang/lib/Basic/Targets/RISCV.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets/RISCV.h b/clang/lib/Basic/Targets/RISCV.h index ce193feaeb9..9118494a87a 100644 --- a/clang/lib/Basic/Targets/RISCV.h +++ b/clang/lib/Basic/Targets/RISCV.h @@ -93,6 +93,13 @@ public: } return false; } + + void setMaxAtomicWidth() override { + MaxAtomicPromoteWidth = 128; + + if (HasA) + MaxAtomicInlineWidth = 32; + } }; class LLVM_LIBRARY_VISIBILITY RISCV64TargetInfo : public RISCVTargetInfo { public: @@ -110,6 +117,13 @@ public: } return false; } + + void setMaxAtomicWidth() override { + MaxAtomicPromoteWidth = 128; + + if (HasA) + MaxAtomicInlineWidth = 64; + } }; } // namespace targets } // namespace clang |

