diff options
author | Thomas Lively <tlively@google.com> | 2019-12-13 17:08:04 -0800 |
---|---|---|
committer | Thomas Lively <tlively@google.com> | 2019-12-16 11:48:49 -0800 |
commit | 3a93756dfbb0dcb7c62fcbe5b0ab8f8591fc9721 (patch) | |
tree | 25092e97aee0e2bc19cf499520ed7693722f9e56 /clang/lib/CodeGen | |
parent | cc802ea67beb66d2f8a935e647c3aedcf7848211 (diff) | |
download | bcm5719-llvm-3a93756dfbb0dcb7c62fcbe5b0ab8f8591fc9721.tar.gz bcm5719-llvm-3a93756dfbb0dcb7c62fcbe5b0ab8f8591fc9721.zip |
[WebAssembly] Replace SIMD int min/max builtins with patterns
Summary:
The instructions were originally implemented via builtins and
intrinsics so users would have to explicitly opt-in to using
them. This was useful while were validating whether these instructions
should have been merged into the spec proposal. Now that they have
been, we can use normal codegen patterns, so the intrinsics and
builtins are no longer useful.
Reviewers: aheejin
Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, sunfish, cfe-commits, llvm-commits
Tags: #clang, #llvm
Differential Revision: https://reviews.llvm.org/D71500
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 44 |
1 files changed, 1 insertions, 43 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 29226d6af50..2e6c95c02c3 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -375,7 +375,7 @@ static Value *emitUnaryMaybeConstrainedFPBuiltin(CodeGenFunction &CGF, return CGF.Builder.CreateCall(F, Src0); } } - + // Emit an intrinsic that has 2 operands of the same type as its result. // Depending on mode, this may be a constrained floating-point intrinsic. static Value *emitBinaryMaybeConstrainedFPBuiltin(CodeGenFunction &CGF, @@ -14504,48 +14504,6 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID, ConvertType(E->getType())); return Builder.CreateCall(Callee, {V1, V2, C}); } - case WebAssembly::BI__builtin_wasm_min_s_i8x16: - case WebAssembly::BI__builtin_wasm_min_u_i8x16: - case WebAssembly::BI__builtin_wasm_max_s_i8x16: - case WebAssembly::BI__builtin_wasm_max_u_i8x16: - case WebAssembly::BI__builtin_wasm_min_s_i16x8: - case WebAssembly::BI__builtin_wasm_min_u_i16x8: - case WebAssembly::BI__builtin_wasm_max_s_i16x8: - case WebAssembly::BI__builtin_wasm_max_u_i16x8: - case WebAssembly::BI__builtin_wasm_min_s_i32x4: - case WebAssembly::BI__builtin_wasm_min_u_i32x4: - case WebAssembly::BI__builtin_wasm_max_s_i32x4: - case WebAssembly::BI__builtin_wasm_max_u_i32x4: { - unsigned IntNo; - switch (BuiltinID) { - case WebAssembly::BI__builtin_wasm_min_s_i8x16: - case WebAssembly::BI__builtin_wasm_min_s_i16x8: - case WebAssembly::BI__builtin_wasm_min_s_i32x4: - IntNo = Intrinsic::wasm_min_signed; - break; - case WebAssembly::BI__builtin_wasm_min_u_i8x16: - case WebAssembly::BI__builtin_wasm_min_u_i16x8: - case WebAssembly::BI__builtin_wasm_min_u_i32x4: - IntNo = Intrinsic::wasm_min_unsigned; - break; - case WebAssembly::BI__builtin_wasm_max_s_i8x16: - case WebAssembly::BI__builtin_wasm_max_s_i16x8: - case WebAssembly::BI__builtin_wasm_max_s_i32x4: - IntNo = Intrinsic::wasm_max_signed; - break; - case WebAssembly::BI__builtin_wasm_max_u_i8x16: - case WebAssembly::BI__builtin_wasm_max_u_i16x8: - case WebAssembly::BI__builtin_wasm_max_u_i32x4: - IntNo = Intrinsic::wasm_max_unsigned; - break; - default: - llvm_unreachable("unexpected builtin ID"); - } - Value *LHS = EmitScalarExpr(E->getArg(0)); - Value *RHS = EmitScalarExpr(E->getArg(1)); - Function *Callee = CGM.getIntrinsic(IntNo, ConvertType(E->getType())); - return Builder.CreateCall(Callee, {LHS, RHS}); - } case WebAssembly::BI__builtin_wasm_dot_s_i32x4_i16x8: { Value *LHS = EmitScalarExpr(E->getArg(0)); Value *RHS = EmitScalarExpr(E->getArg(1)); |