diff options
| author | LemonBoy <thatlemon@gmail.com> | 2020-10-04 18:23:52 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-10-05 04:51:45 -0400 |
| commit | 22b5e47839cf34c1e4a7c5e6dc256e041b4bf8fc (patch) | |
| tree | a940511e3d881231d60276f824a6a9055877dc83 /src/zig_llvm.cpp | |
| parent | 7c5a24e08cd0bffd2a5cce6d1fd592a7d2bee678 (diff) | |
| download | zig-22b5e47839cf34c1e4a7c5e6dc256e041b4bf8fc.tar.gz zig-22b5e47839cf34c1e4a7c5e6dc256e041b4bf8fc.zip | |
stage1: Implement @reduce builtin for vector types
The builtin folds a Vector(N,T) into a scalar T using a specified
operator.
Closes #2698
Diffstat (limited to 'src/zig_llvm.cpp')
| -rw-r--r-- | src/zig_llvm.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp index 08823050ad..78082d16ba 100644 --- a/src/zig_llvm.cpp +++ b/src/zig_llvm.cpp @@ -1123,6 +1123,34 @@ LLVMValueRef ZigLLVMBuildAtomicRMW(LLVMBuilderRef B, enum ZigLLVM_AtomicRMWBinOp singleThread ? SyncScope::SingleThread : SyncScope::System)); } +LLVMValueRef ZigLLVMBuildAndReduce(LLVMBuilderRef B, LLVMValueRef Val) { + return wrap(unwrap(B)->CreateAndReduce(unwrap(Val))); +} + +LLVMValueRef ZigLLVMBuildOrReduce(LLVMBuilderRef B, LLVMValueRef Val) { + return wrap(unwrap(B)->CreateOrReduce(unwrap(Val))); +} + +LLVMValueRef ZigLLVMBuildXorReduce(LLVMBuilderRef B, LLVMValueRef Val) { + return wrap(unwrap(B)->CreateXorReduce(unwrap(Val))); +} + +LLVMValueRef ZigLLVMBuildIntMaxReduce(LLVMBuilderRef B, LLVMValueRef Val, bool is_signed) { + return wrap(unwrap(B)->CreateIntMaxReduce(unwrap(Val), is_signed)); +} + +LLVMValueRef ZigLLVMBuildIntMinReduce(LLVMBuilderRef B, LLVMValueRef Val, bool is_signed) { + return wrap(unwrap(B)->CreateIntMinReduce(unwrap(Val), is_signed)); +} + +LLVMValueRef ZigLLVMBuildFPMaxReduce(LLVMBuilderRef B, LLVMValueRef Val) { + return wrap(unwrap(B)->CreateFPMaxReduce(unwrap(Val))); +} + +LLVMValueRef ZigLLVMBuildFPMinReduce(LLVMBuilderRef B, LLVMValueRef Val) { + return wrap(unwrap(B)->CreateFPMinReduce(unwrap(Val))); +} + static_assert((Triple::ArchType)ZigLLVM_UnknownArch == Triple::UnknownArch, ""); static_assert((Triple::ArchType)ZigLLVM_arm == Triple::arm, ""); static_assert((Triple::ArchType)ZigLLVM_armeb == Triple::armeb, ""); |
