22
22
#include " llvm/Support/CommandLine.h"
23
23
#include " llvm/Support/Debug.h"
24
24
#include " llvm/Support/ErrorHandling.h"
25
+ #include " llvm/Support/FormatVariadic.h"
25
26
#include " llvm/Support/raw_ostream.h"
26
27
#include " llvm/Target/TargetIntrinsicInfo.h"
27
28
@@ -828,12 +829,11 @@ getOperationOrderings(MemSDNode *N, const NVPTXSubtarget *Subtarget) {
828
829
Ordering == AtomicOrdering::Unordered ||
829
830
Ordering == AtomicOrdering::Monotonic) &&
830
831
!HasMemoryOrdering) {
831
- SmallString<256 > Msg;
832
- raw_svector_ostream OS (Msg);
833
- OS << " PTX does not support \" atomic\" for orderings different than"
834
- " \" NotAtomic\" or \" Monotonic\" for sm_60 or older, but order is: \" "
835
- << toIRString (Ordering) << " \" ." ;
836
- report_fatal_error (OS.str ());
832
+ report_fatal_error (
833
+ formatv (" PTX does not support \" atomic\" for orderings different than"
834
+ " \" NotAtomic\" or \" Monotonic\" for sm_60 or older, but order "
835
+ " is: \" {}\" ." ,
836
+ toIRString (Ordering)));
837
837
}
838
838
839
839
// [3]: TODO: these should eventually use .mmio<.atomic sem>; for now we drop
@@ -870,35 +870,25 @@ getOperationOrderings(MemSDNode *N, const NVPTXSubtarget *Subtarget) {
870
870
// case AtomicOrdering::Consume: // If LLVM ever provides this, lower it to
871
871
// Acquire.
872
872
case AtomicOrdering::Acquire:
873
- if (!N->readMem ()) {
874
- SmallString<256 > Msg;
875
- raw_svector_ostream OS (Msg);
876
- OS << " PTX only supports Acquire Ordering on reads: "
877
- << N->getOperationName ();
878
- N->print (OS);
879
- report_fatal_error (OS.str ());
880
- }
873
+ if (!N->readMem ())
874
+ report_fatal_error (
875
+ formatv (" PTX only supports Acquire Ordering on reads: {}" ,
876
+ N->getOperationName ()));
881
877
return AddrGenericOrGlobalOrShared ? NVPTX::Ordering::Acquire
882
878
: NVPTX::Ordering::NotAtomic;
883
879
case AtomicOrdering::Release:
884
- if (!N->writeMem ()) {
885
- SmallString<256 > Msg;
886
- raw_svector_ostream OS (Msg);
887
- OS << " PTX only supports Release Ordering on writes: "
888
- << N->getOperationName ();
889
- N->print (OS);
890
- report_fatal_error (OS.str ());
891
- }
880
+ if (!N->writeMem ())
881
+ report_fatal_error (
882
+ formatv (" PTX only supports Release Ordering on writes: {}" ,
883
+ N->getOperationName ()));
892
884
return AddrGenericOrGlobalOrShared ? NVPTX::Ordering::Release
893
885
: NVPTX::Ordering::NotAtomic;
894
886
case AtomicOrdering::AcquireRelease: {
895
- SmallString<256 > Msg;
896
- raw_svector_ostream OS (Msg);
897
- OS << " NVPTX does not support AcquireRelease Ordering on read-modify-write "
898
- " yet and PTX does not support it on loads or stores: "
899
- << N->getOperationName ();
900
- N->print (OS);
901
- report_fatal_error (OS.str ());
887
+ report_fatal_error (
888
+ formatv (" NVPTX does not support AcquireRelease Ordering on "
889
+ " read-modify-write "
890
+ " yet and PTX does not support it on loads or stores: {}" ,
891
+ N->getOperationName ()));
902
892
}
903
893
case AtomicOrdering::SequentiallyConsistent: {
904
894
// LLVM-IR SequentiallyConsistent atomics map to a two-instruction PTX
@@ -913,27 +903,20 @@ getOperationOrderings(MemSDNode *N, const NVPTXSubtarget *Subtarget) {
913
903
InstrOrder = NVPTX::Ordering::Acquire;
914
904
else if (N->writeMem ())
915
905
InstrOrder = NVPTX::Ordering::Release;
916
- else {
917
- SmallString<256 > Msg;
918
- raw_svector_ostream OS (Msg);
919
- OS << " NVPTX does not support SequentiallyConsistent Ordering on "
920
- " read-modify-writes yet: "
921
- << N->getOperationName ();
922
- N->print (OS);
923
- report_fatal_error (OS.str ());
924
- }
906
+ else
907
+ report_fatal_error (
908
+ formatv (" NVPTX does not support SequentiallyConsistent Ordering on "
909
+ " read-modify-writes yet: {}" ,
910
+ N->getOperationName ()));
925
911
return AddrGenericOrGlobalOrShared
926
912
? OperationOrderings (InstrOrder,
927
913
NVPTX::Ordering::SequentiallyConsistent)
928
914
: OperationOrderings (NVPTX::Ordering::NotAtomic);
929
915
}
930
916
}
931
-
932
- SmallString<256 > Msg;
933
- raw_svector_ostream OS (Msg);
934
- OS << " NVPTX backend does not support AtomicOrdering \" "
935
- << toIRString (Ordering) << " \" yet." ;
936
- report_fatal_error (OS.str ());
917
+ report_fatal_error (
918
+ formatv (" NVPTX backend does not support AtomicOrdering \" {}\" yet." ,
919
+ toIRString (Ordering)));
937
920
}
938
921
939
922
} // namespace
@@ -1166,11 +1149,8 @@ bool NVPTXDAGToDAGISel::tryLoad(SDNode *N) {
1166
1149
break ;
1167
1150
}
1168
1151
default :
1169
- SmallString<256 > Msg;
1170
- raw_svector_ostream OS (Msg);
1171
- OS << " Unexpected fence ordering: \" " << NVPTX::Ordering (FenceOrdering)
1172
- << " \" ." ;
1173
- report_fatal_error (OS.str ());
1152
+ report_fatal_error (formatv (" Unexpected fence ordering: \" {}\" ." ,
1153
+ toCString (NVPTX::Ordering (FenceOrdering))));
1174
1154
}
1175
1155
1176
1156
// Type Setting: fromType + fromTypeWidth
@@ -1329,11 +1309,8 @@ bool NVPTXDAGToDAGISel::tryLoadVector(SDNode *N) {
1329
1309
break ;
1330
1310
}
1331
1311
default :
1332
- SmallString<256 > Msg;
1333
- raw_svector_ostream OS (Msg);
1334
- OS << " Unexpected fence ordering: \" " << NVPTX::Ordering (FenceOrdering)
1335
- << " \" ." ;
1336
- report_fatal_error (OS.str ());
1312
+ report_fatal_error (formatv (" Unexpected fence ordering: \" {}\" ." ,
1313
+ toCString (NVPTX::Ordering (FenceOrdering))));
1337
1314
}
1338
1315
1339
1316
// Vector Setting
@@ -2001,11 +1978,8 @@ bool NVPTXDAGToDAGISel::tryStore(SDNode *N) {
2001
1978
break ;
2002
1979
}
2003
1980
default :
2004
- SmallString<256 > Msg;
2005
- raw_svector_ostream OS (Msg);
2006
- OS << " Unexpected fence ordering: \" " << NVPTX::Ordering (FenceOrdering)
2007
- << " \" ." ;
2008
- report_fatal_error (OS.str ());
1981
+ report_fatal_error (formatv (" Unexpected fence ordering: \" {}\" ." ,
1982
+ toCString (NVPTX::Ordering (FenceOrdering))));
2009
1983
}
2010
1984
2011
1985
// Vector Setting
@@ -2161,11 +2135,8 @@ bool NVPTXDAGToDAGISel::tryStoreVector(SDNode *N) {
2161
2135
break ;
2162
2136
}
2163
2137
default :
2164
- SmallString<256 > Msg;
2165
- raw_svector_ostream OS (Msg);
2166
- OS << " Unexpected fence ordering: \" " << NVPTX::Ordering (FenceOrdering)
2167
- << " \" ." ;
2168
- report_fatal_error (OS.str ());
2138
+ report_fatal_error (formatv (" Unexpected fence ordering: \" {}\" ." ,
2139
+ toCString (NVPTX::Ordering (FenceOrdering))));
2169
2140
}
2170
2141
2171
2142
// Type Setting: toType + toTypeWidth
0 commit comments