r367323 - [COFF][ARM64] Reorder handling of aarch64 MSVC builtins

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 1 01:39:54 PDT 2019


Merged to release_90 in r367525.

On Tue, Jul 30, 2019 at 5:32 PM David Major via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
>
> Author: dmajor
> Date: Tue Jul 30 08:32:49 2019
> New Revision: 367323
>
> URL: http://llvm.org/viewvc/llvm-project?rev=367323&view=rev
> Log:
> [COFF][ARM64] Reorder handling of aarch64 MSVC builtins
>
> In `CodeGenFunction::EmitAArch64BuiltinExpr()`, bulk move all of the aarch64 MSVC-builtin cases to an earlier point in the function (the `// Handle non-overloaded intrinsics first` switch block) in order to avoid an unreachable in `GetNeonType()`. The NEON type-overloading logic is not appropriate for the Windows builtins.
>
> Fixes https://llvm.org/pr42775
>
> Differential Revision: https://reviews.llvm.org/D65403
>
>
> Modified:
>     cfe/trunk/lib/CodeGen/CGBuiltin.cpp
>     cfe/trunk/test/CodeGen/arm64-microsoft-intrinsics.c
>
> Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=367323&r1=367322&r2=367323&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Tue Jul 30 08:32:49 2019
> @@ -8014,6 +8014,151 @@ Value *CodeGenFunction::EmitAArch64Built
>      return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
>                                          "vgetq_lane");
>    }
> +  case AArch64::BI_BitScanForward:
> +  case AArch64::BI_BitScanForward64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_BitScanForward, E);
> +  case AArch64::BI_BitScanReverse:
> +  case AArch64::BI_BitScanReverse64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_BitScanReverse, E);
> +  case AArch64::BI_InterlockedAnd64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedAnd, E);
> +  case AArch64::BI_InterlockedExchange64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchange, E);
> +  case AArch64::BI_InterlockedExchangeAdd64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeAdd, E);
> +  case AArch64::BI_InterlockedExchangeSub64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeSub, E);
> +  case AArch64::BI_InterlockedOr64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedOr, E);
> +  case AArch64::BI_InterlockedXor64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedXor, E);
> +  case AArch64::BI_InterlockedDecrement64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedDecrement, E);
> +  case AArch64::BI_InterlockedIncrement64:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedIncrement, E);
> +  case AArch64::BI_InterlockedExchangeAdd8_acq:
> +  case AArch64::BI_InterlockedExchangeAdd16_acq:
> +  case AArch64::BI_InterlockedExchangeAdd_acq:
> +  case AArch64::BI_InterlockedExchangeAdd64_acq:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeAdd_acq, E);
> +  case AArch64::BI_InterlockedExchangeAdd8_rel:
> +  case AArch64::BI_InterlockedExchangeAdd16_rel:
> +  case AArch64::BI_InterlockedExchangeAdd_rel:
> +  case AArch64::BI_InterlockedExchangeAdd64_rel:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeAdd_rel, E);
> +  case AArch64::BI_InterlockedExchangeAdd8_nf:
> +  case AArch64::BI_InterlockedExchangeAdd16_nf:
> +  case AArch64::BI_InterlockedExchangeAdd_nf:
> +  case AArch64::BI_InterlockedExchangeAdd64_nf:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeAdd_nf, E);
> +  case AArch64::BI_InterlockedExchange8_acq:
> +  case AArch64::BI_InterlockedExchange16_acq:
> +  case AArch64::BI_InterlockedExchange_acq:
> +  case AArch64::BI_InterlockedExchange64_acq:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchange_acq, E);
> +  case AArch64::BI_InterlockedExchange8_rel:
> +  case AArch64::BI_InterlockedExchange16_rel:
> +  case AArch64::BI_InterlockedExchange_rel:
> +  case AArch64::BI_InterlockedExchange64_rel:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchange_rel, E);
> +  case AArch64::BI_InterlockedExchange8_nf:
> +  case AArch64::BI_InterlockedExchange16_nf:
> +  case AArch64::BI_InterlockedExchange_nf:
> +  case AArch64::BI_InterlockedExchange64_nf:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchange_nf, E);
> +  case AArch64::BI_InterlockedCompareExchange8_acq:
> +  case AArch64::BI_InterlockedCompareExchange16_acq:
> +  case AArch64::BI_InterlockedCompareExchange_acq:
> +  case AArch64::BI_InterlockedCompareExchange64_acq:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedCompareExchange_acq, E);
> +  case AArch64::BI_InterlockedCompareExchange8_rel:
> +  case AArch64::BI_InterlockedCompareExchange16_rel:
> +  case AArch64::BI_InterlockedCompareExchange_rel:
> +  case AArch64::BI_InterlockedCompareExchange64_rel:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedCompareExchange_rel, E);
> +  case AArch64::BI_InterlockedCompareExchange8_nf:
> +  case AArch64::BI_InterlockedCompareExchange16_nf:
> +  case AArch64::BI_InterlockedCompareExchange_nf:
> +  case AArch64::BI_InterlockedCompareExchange64_nf:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedCompareExchange_nf, E);
> +  case AArch64::BI_InterlockedOr8_acq:
> +  case AArch64::BI_InterlockedOr16_acq:
> +  case AArch64::BI_InterlockedOr_acq:
> +  case AArch64::BI_InterlockedOr64_acq:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedOr_acq, E);
> +  case AArch64::BI_InterlockedOr8_rel:
> +  case AArch64::BI_InterlockedOr16_rel:
> +  case AArch64::BI_InterlockedOr_rel:
> +  case AArch64::BI_InterlockedOr64_rel:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedOr_rel, E);
> +  case AArch64::BI_InterlockedOr8_nf:
> +  case AArch64::BI_InterlockedOr16_nf:
> +  case AArch64::BI_InterlockedOr_nf:
> +  case AArch64::BI_InterlockedOr64_nf:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedOr_nf, E);
> +  case AArch64::BI_InterlockedXor8_acq:
> +  case AArch64::BI_InterlockedXor16_acq:
> +  case AArch64::BI_InterlockedXor_acq:
> +  case AArch64::BI_InterlockedXor64_acq:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedXor_acq, E);
> +  case AArch64::BI_InterlockedXor8_rel:
> +  case AArch64::BI_InterlockedXor16_rel:
> +  case AArch64::BI_InterlockedXor_rel:
> +  case AArch64::BI_InterlockedXor64_rel:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedXor_rel, E);
> +  case AArch64::BI_InterlockedXor8_nf:
> +  case AArch64::BI_InterlockedXor16_nf:
> +  case AArch64::BI_InterlockedXor_nf:
> +  case AArch64::BI_InterlockedXor64_nf:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedXor_nf, E);
> +  case AArch64::BI_InterlockedAnd8_acq:
> +  case AArch64::BI_InterlockedAnd16_acq:
> +  case AArch64::BI_InterlockedAnd_acq:
> +  case AArch64::BI_InterlockedAnd64_acq:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedAnd_acq, E);
> +  case AArch64::BI_InterlockedAnd8_rel:
> +  case AArch64::BI_InterlockedAnd16_rel:
> +  case AArch64::BI_InterlockedAnd_rel:
> +  case AArch64::BI_InterlockedAnd64_rel:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedAnd_rel, E);
> +  case AArch64::BI_InterlockedAnd8_nf:
> +  case AArch64::BI_InterlockedAnd16_nf:
> +  case AArch64::BI_InterlockedAnd_nf:
> +  case AArch64::BI_InterlockedAnd64_nf:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedAnd_nf, E);
> +  case AArch64::BI_InterlockedIncrement16_acq:
> +  case AArch64::BI_InterlockedIncrement_acq:
> +  case AArch64::BI_InterlockedIncrement64_acq:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedIncrement_acq, E);
> +  case AArch64::BI_InterlockedIncrement16_rel:
> +  case AArch64::BI_InterlockedIncrement_rel:
> +  case AArch64::BI_InterlockedIncrement64_rel:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedIncrement_rel, E);
> +  case AArch64::BI_InterlockedIncrement16_nf:
> +  case AArch64::BI_InterlockedIncrement_nf:
> +  case AArch64::BI_InterlockedIncrement64_nf:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedIncrement_nf, E);
> +  case AArch64::BI_InterlockedDecrement16_acq:
> +  case AArch64::BI_InterlockedDecrement_acq:
> +  case AArch64::BI_InterlockedDecrement64_acq:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedDecrement_acq, E);
> +  case AArch64::BI_InterlockedDecrement16_rel:
> +  case AArch64::BI_InterlockedDecrement_rel:
> +  case AArch64::BI_InterlockedDecrement64_rel:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedDecrement_rel, E);
> +  case AArch64::BI_InterlockedDecrement16_nf:
> +  case AArch64::BI_InterlockedDecrement_nf:
> +  case AArch64::BI_InterlockedDecrement64_nf:
> +    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedDecrement_nf, E);
> +
> +  case AArch64::BI_InterlockedAdd: {
> +    Value *Arg0 = EmitScalarExpr(E->getArg(0));
> +    Value *Arg1 = EmitScalarExpr(E->getArg(1));
> +    AtomicRMWInst *RMWI = Builder.CreateAtomicRMW(
> +      AtomicRMWInst::Add, Arg0, Arg1,
> +      llvm::AtomicOrdering::SequentiallyConsistent);
> +    return Builder.CreateAdd(RMWI, Arg1);
> +  }
>    }
>
>    llvm::VectorType *VTy = GetNeonType(this, Type);
> @@ -9131,151 +9276,6 @@ Value *CodeGenFunction::EmitAArch64Built
>      Int = Intrinsic::aarch64_neon_suqadd;
>      return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vuqadd");
>    }
> -  case AArch64::BI_BitScanForward:
> -  case AArch64::BI_BitScanForward64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_BitScanForward, E);
> -  case AArch64::BI_BitScanReverse:
> -  case AArch64::BI_BitScanReverse64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_BitScanReverse, E);
> -  case AArch64::BI_InterlockedAnd64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedAnd, E);
> -  case AArch64::BI_InterlockedExchange64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchange, E);
> -  case AArch64::BI_InterlockedExchangeAdd64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeAdd, E);
> -  case AArch64::BI_InterlockedExchangeSub64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeSub, E);
> -  case AArch64::BI_InterlockedOr64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedOr, E);
> -  case AArch64::BI_InterlockedXor64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedXor, E);
> -  case AArch64::BI_InterlockedDecrement64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedDecrement, E);
> -  case AArch64::BI_InterlockedIncrement64:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedIncrement, E);
> -  case AArch64::BI_InterlockedExchangeAdd8_acq:
> -  case AArch64::BI_InterlockedExchangeAdd16_acq:
> -  case AArch64::BI_InterlockedExchangeAdd_acq:
> -  case AArch64::BI_InterlockedExchangeAdd64_acq:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeAdd_acq, E);
> -  case AArch64::BI_InterlockedExchangeAdd8_rel:
> -  case AArch64::BI_InterlockedExchangeAdd16_rel:
> -  case AArch64::BI_InterlockedExchangeAdd_rel:
> -  case AArch64::BI_InterlockedExchangeAdd64_rel:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeAdd_rel, E);
> -  case AArch64::BI_InterlockedExchangeAdd8_nf:
> -  case AArch64::BI_InterlockedExchangeAdd16_nf:
> -  case AArch64::BI_InterlockedExchangeAdd_nf:
> -  case AArch64::BI_InterlockedExchangeAdd64_nf:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchangeAdd_nf, E);
> -  case AArch64::BI_InterlockedExchange8_acq:
> -  case AArch64::BI_InterlockedExchange16_acq:
> -  case AArch64::BI_InterlockedExchange_acq:
> -  case AArch64::BI_InterlockedExchange64_acq:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchange_acq, E);
> -  case AArch64::BI_InterlockedExchange8_rel:
> -  case AArch64::BI_InterlockedExchange16_rel:
> -  case AArch64::BI_InterlockedExchange_rel:
> -  case AArch64::BI_InterlockedExchange64_rel:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchange_rel, E);
> -  case AArch64::BI_InterlockedExchange8_nf:
> -  case AArch64::BI_InterlockedExchange16_nf:
> -  case AArch64::BI_InterlockedExchange_nf:
> -  case AArch64::BI_InterlockedExchange64_nf:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedExchange_nf, E);
> -  case AArch64::BI_InterlockedCompareExchange8_acq:
> -  case AArch64::BI_InterlockedCompareExchange16_acq:
> -  case AArch64::BI_InterlockedCompareExchange_acq:
> -  case AArch64::BI_InterlockedCompareExchange64_acq:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedCompareExchange_acq, E);
> -  case AArch64::BI_InterlockedCompareExchange8_rel:
> -  case AArch64::BI_InterlockedCompareExchange16_rel:
> -  case AArch64::BI_InterlockedCompareExchange_rel:
> -  case AArch64::BI_InterlockedCompareExchange64_rel:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedCompareExchange_rel, E);
> -  case AArch64::BI_InterlockedCompareExchange8_nf:
> -  case AArch64::BI_InterlockedCompareExchange16_nf:
> -  case AArch64::BI_InterlockedCompareExchange_nf:
> -  case AArch64::BI_InterlockedCompareExchange64_nf:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedCompareExchange_nf, E);
> -  case AArch64::BI_InterlockedOr8_acq:
> -  case AArch64::BI_InterlockedOr16_acq:
> -  case AArch64::BI_InterlockedOr_acq:
> -  case AArch64::BI_InterlockedOr64_acq:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedOr_acq, E);
> -  case AArch64::BI_InterlockedOr8_rel:
> -  case AArch64::BI_InterlockedOr16_rel:
> -  case AArch64::BI_InterlockedOr_rel:
> -  case AArch64::BI_InterlockedOr64_rel:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedOr_rel, E);
> -  case AArch64::BI_InterlockedOr8_nf:
> -  case AArch64::BI_InterlockedOr16_nf:
> -  case AArch64::BI_InterlockedOr_nf:
> -  case AArch64::BI_InterlockedOr64_nf:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedOr_nf, E);
> -  case AArch64::BI_InterlockedXor8_acq:
> -  case AArch64::BI_InterlockedXor16_acq:
> -  case AArch64::BI_InterlockedXor_acq:
> -  case AArch64::BI_InterlockedXor64_acq:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedXor_acq, E);
> -  case AArch64::BI_InterlockedXor8_rel:
> -  case AArch64::BI_InterlockedXor16_rel:
> -  case AArch64::BI_InterlockedXor_rel:
> -  case AArch64::BI_InterlockedXor64_rel:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedXor_rel, E);
> -  case AArch64::BI_InterlockedXor8_nf:
> -  case AArch64::BI_InterlockedXor16_nf:
> -  case AArch64::BI_InterlockedXor_nf:
> -  case AArch64::BI_InterlockedXor64_nf:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedXor_nf, E);
> -  case AArch64::BI_InterlockedAnd8_acq:
> -  case AArch64::BI_InterlockedAnd16_acq:
> -  case AArch64::BI_InterlockedAnd_acq:
> -  case AArch64::BI_InterlockedAnd64_acq:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedAnd_acq, E);
> -  case AArch64::BI_InterlockedAnd8_rel:
> -  case AArch64::BI_InterlockedAnd16_rel:
> -  case AArch64::BI_InterlockedAnd_rel:
> -  case AArch64::BI_InterlockedAnd64_rel:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedAnd_rel, E);
> -  case AArch64::BI_InterlockedAnd8_nf:
> -  case AArch64::BI_InterlockedAnd16_nf:
> -  case AArch64::BI_InterlockedAnd_nf:
> -  case AArch64::BI_InterlockedAnd64_nf:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedAnd_nf, E);
> -  case AArch64::BI_InterlockedIncrement16_acq:
> -  case AArch64::BI_InterlockedIncrement_acq:
> -  case AArch64::BI_InterlockedIncrement64_acq:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedIncrement_acq, E);
> -  case AArch64::BI_InterlockedIncrement16_rel:
> -  case AArch64::BI_InterlockedIncrement_rel:
> -  case AArch64::BI_InterlockedIncrement64_rel:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedIncrement_rel, E);
> -  case AArch64::BI_InterlockedIncrement16_nf:
> -  case AArch64::BI_InterlockedIncrement_nf:
> -  case AArch64::BI_InterlockedIncrement64_nf:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedIncrement_nf, E);
> -  case AArch64::BI_InterlockedDecrement16_acq:
> -  case AArch64::BI_InterlockedDecrement_acq:
> -  case AArch64::BI_InterlockedDecrement64_acq:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedDecrement_acq, E);
> -  case AArch64::BI_InterlockedDecrement16_rel:
> -  case AArch64::BI_InterlockedDecrement_rel:
> -  case AArch64::BI_InterlockedDecrement64_rel:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedDecrement_rel, E);
> -  case AArch64::BI_InterlockedDecrement16_nf:
> -  case AArch64::BI_InterlockedDecrement_nf:
> -  case AArch64::BI_InterlockedDecrement64_nf:
> -    return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedDecrement_nf, E);
> -
> -  case AArch64::BI_InterlockedAdd: {
> -    Value *Arg0 = EmitScalarExpr(E->getArg(0));
> -    Value *Arg1 = EmitScalarExpr(E->getArg(1));
> -    AtomicRMWInst *RMWI = Builder.CreateAtomicRMW(
> -      AtomicRMWInst::Add, Arg0, Arg1,
> -      llvm::AtomicOrdering::SequentiallyConsistent);
> -    return Builder.CreateAdd(RMWI, Arg1);
> -  }
>    }
>  }
>
>
> Modified: cfe/trunk/test/CodeGen/arm64-microsoft-intrinsics.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm64-microsoft-intrinsics.c?rev=367323&r1=367322&r2=367323&view=diff
> ==============================================================================
> --- cfe/trunk/test/CodeGen/arm64-microsoft-intrinsics.c (original)
> +++ cfe/trunk/test/CodeGen/arm64-microsoft-intrinsics.c Tue Jul 30 08:32:49 2019
> @@ -8,6 +8,10 @@ long test_InterlockedAdd(long volatile *
>    return _InterlockedAdd(Addend, Value);
>  }
>
> +long test_InterlockedAdd_constant(long volatile *Addend) {
> +  return _InterlockedAdd(Addend, -1);
> +}
> +
>  // CHECK-LABEL: define {{.*}} i32 @test_InterlockedAdd(i32* %Addend, i32 %Value) {{.*}} {
>  // CHECK-MSVC: %[[OLDVAL:[0-9]+]] = atomicrmw add i32* %1, i32 %2 seq_cst
>  // CHECK-MSVC: %[[NEWVAL:[0-9]+]] = add i32 %[[OLDVAL:[0-9]+]], %2
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list