11use crate :: attributes;
22use crate :: common:: Funclet ;
33use crate :: context:: CodegenCx ;
4- use crate :: llvm:: { self , BasicBlock , False } ;
5- use crate :: llvm:: { AtomicOrdering , AtomicRmwBinOp , SynchronizationScope } ;
4+ use crate :: llvm:: { self , AtomicOrdering , AtomicRmwBinOp , BasicBlock } ;
65use crate :: type_:: Type ;
76use crate :: type_of:: LayoutLlvmExt ;
87use crate :: value:: Value ;
98use cstr:: cstr;
109use libc:: { c_char, c_uint} ;
11- use rustc_codegen_ssa:: common:: { IntPredicate , RealPredicate , TypeKind } ;
10+ use rustc_codegen_ssa:: common:: { IntPredicate , RealPredicate , SynchronizationScope , TypeKind } ;
1211use rustc_codegen_ssa:: mir:: operand:: { OperandRef , OperandValue } ;
1312use rustc_codegen_ssa:: mir:: place:: PlaceRef ;
1413use rustc_codegen_ssa:: traits:: * ;
@@ -1042,15 +1041,17 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
10421041 ) -> & ' ll Value {
10431042 let weak = if weak { llvm:: True } else { llvm:: False } ;
10441043 unsafe {
1045- llvm:: LLVMRustBuildAtomicCmpXchg (
1044+ let value = llvm:: LLVMBuildAtomicCmpXchg (
10461045 self . llbuilder ,
10471046 dst,
10481047 cmp,
10491048 src,
10501049 AtomicOrdering :: from_generic ( order) ,
10511050 AtomicOrdering :: from_generic ( failure_order) ,
1052- weak,
1053- )
1051+ llvm:: False , // SingleThreaded
1052+ ) ;
1053+ llvm:: LLVMSetWeak ( value, weak) ;
1054+ value
10541055 }
10551056 }
10561057 fn atomic_rmw (
@@ -1067,21 +1068,26 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
10671068 dst,
10681069 src,
10691070 AtomicOrdering :: from_generic ( order) ,
1070- False ,
1071+ llvm :: False , // SingleThreaded
10711072 )
10721073 }
10731074 }
10741075
10751076 fn atomic_fence (
10761077 & mut self ,
10771078 order : rustc_codegen_ssa:: common:: AtomicOrdering ,
1078- scope : rustc_codegen_ssa :: common :: SynchronizationScope ,
1079+ scope : SynchronizationScope ,
10791080 ) {
1081+ let single_threaded = match scope {
1082+ SynchronizationScope :: SingleThread => llvm:: True ,
1083+ SynchronizationScope :: CrossThread => llvm:: False ,
1084+ } ;
10801085 unsafe {
1081- llvm:: LLVMRustBuildAtomicFence (
1086+ llvm:: LLVMBuildFence (
10821087 self . llbuilder ,
10831088 AtomicOrdering :: from_generic ( order) ,
1084- SynchronizationScope :: from_generic ( scope) ,
1089+ single_threaded,
1090+ UNNAMED ,
10851091 ) ;
10861092 }
10871093 }
0 commit comments