@@ -741,7 +741,7 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
741
741
// | Relaxed | Yes | Generic / Shared [0] | .volatile | .volatile |
742
742
// | Relaxed | Yes | Global [0] | .volatile | .mmio.relaxed.sys (PTX 8.2+) or .volatile (PTX 8.1-) |
743
743
// | Relaxed | Yes | Local / Const / Param | plain [1] | .weak [1] |
744
- // | Other | Yes | Generic / Shared / Global [0] | Error [4 ] | <atomic sem> [3] |
744
+ // | Other | Yes | Generic / Shared / Global [0] | Error [2 ] | <atomic sem> [3] |
745
745
746
746
// clang-format on
747
747
@@ -763,7 +763,7 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
763
763
}
764
764
765
765
// [2]: Atomics with Ordering different than Relaxed are not supported on
766
- // sm_60 and older.
766
+ // sm_60 and older; this includes volatile atomics .
767
767
if (!(Ordering == AtomicOrdering::NotAtomic ||
768
768
Ordering == AtomicOrdering::Monotonic) &&
769
769
!HasMemoryOrdering) {
@@ -776,45 +776,32 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
776
776
}
777
777
778
778
// [3]: TODO: these should eventually use .mmio<.atomic sem>; for now we drop
779
- // the volatile semantics and preserve the atomic ones. [4]: TODO: volatile
780
- // atomics with order stronger than relaxed are currently unimplemented in
781
- // sm_60 and older.
782
- if (!HasMemoryOrdering && N->isVolatile () &&
783
- !(Ordering == AtomicOrdering::NotAtomic ||
784
- Ordering == AtomicOrdering::Monotonic)) {
785
- SmallString<256 > Msg;
786
- raw_svector_ostream OS (Msg);
787
- OS << " PTX does not support \" volatile atomic\" for orderings different "
788
- " than \" NotAtomic\" or \" Monotonic\" for sm_60 and older, but order "
789
- " is: \" "
790
- << toIRString (Ordering) << " \" ." ;
791
- report_fatal_error (OS.str ());
792
- }
779
+ // the volatile semantics and preserve the atomic ones.
793
780
794
781
// PTX volatile and PTX atomics are not available for statespace that differ
795
782
// from .generic, .global, or .shared. The behavior of PTX volatile and PTX
796
783
// atomics is undefined if the generic address does not refer to a .global or
797
784
// .shared memory location.
798
- bool addrGenericOrGlobalOrShared =
785
+ bool AddrGenericOrGlobalOrShared =
799
786
(CodeAddrSpace == NVPTX::PTXLdStInstCode::GENERIC ||
800
787
CodeAddrSpace == NVPTX::PTXLdStInstCode::GLOBAL ||
801
788
CodeAddrSpace == NVPTX::PTXLdStInstCode::SHARED);
802
- bool useRelaxedMMIO =
789
+ bool UseRelaxedMMIO =
803
790
HasRelaxedMMIO && CodeAddrSpace == NVPTX::PTXLdStInstCode::GLOBAL;
804
791
805
792
switch (Ordering) {
806
793
case AtomicOrdering::NotAtomic:
807
- return N->isVolatile () && addrGenericOrGlobalOrShared
794
+ return N->isVolatile () && AddrGenericOrGlobalOrShared
808
795
? NVPTX::PTXLdStInstCode::Volatile
809
796
: NVPTX::PTXLdStInstCode::NotAtomic;
810
797
case AtomicOrdering::Monotonic:
811
798
if (N->isVolatile ())
812
- return useRelaxedMMIO ? NVPTX::PTXLdStInstCode::RelaxedMMIO
813
- : addrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Volatile
799
+ return UseRelaxedMMIO ? NVPTX::PTXLdStInstCode::RelaxedMMIO
800
+ : AddrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Volatile
814
801
: NVPTX::PTXLdStInstCode::NotAtomic;
815
802
else
816
803
return HasMemoryOrdering ? NVPTX::PTXLdStInstCode::Relaxed
817
- : addrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Volatile
804
+ : AddrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Volatile
818
805
: NVPTX::PTXLdStInstCode::NotAtomic;
819
806
case AtomicOrdering::Acquire:
820
807
if (!N->readMem ()) {
@@ -825,7 +812,7 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
825
812
N->print (OS);
826
813
report_fatal_error (OS.str ());
827
814
}
828
- return addrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Acquire
815
+ return AddrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Acquire
829
816
: NVPTX::PTXLdStInstCode::NotAtomic;
830
817
case AtomicOrdering::Release:
831
818
if (!N->writeMem ()) {
@@ -836,7 +823,7 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
836
823
N->print (OS);
837
824
report_fatal_error (OS.str ());
838
825
}
839
- return addrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Release
826
+ return AddrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Release
840
827
: NVPTX::PTXLdStInstCode::NotAtomic;
841
828
case AtomicOrdering::AcquireRelease: {
842
829
SmallString<256 > Msg;
0 commit comments