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