summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-02-08 20:16:17 +0000
committerCraig Topper <craig.topper@intel.com>2018-02-08 20:16:17 +0000
commitc0b2e982d9320e7ed015c2199ee3fc14abf3e47c (patch)
tree20b7aff61e1aa512a9c226859524001741969cc8 /clang/lib/CodeGen
parentdccf72b583b0135ded4d00ffafc703187eaf5855 (diff)
downloadbcm5719-llvm-c0b2e982d9320e7ed015c2199ee3fc14abf3e47c.tar.gz
bcm5719-llvm-c0b2e982d9320e7ed015c2199ee3fc14abf3e47c.zip
[X86] Replace kortest intrinsics with native IR.
llvm-svn: 324647
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CGBuiltin.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index b4ae779bf51..312714c5072 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -8710,6 +8710,18 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
return EmitX86MaskedCompare(*this, CC, false, Ops);
}
+ case X86::BI__builtin_ia32_kortestchi:
+ case X86::BI__builtin_ia32_kortestzhi: {
+ Value *Or = EmitX86MaskLogic(*this, Instruction::Or, 16, Ops);
+ Value *C;
+ if (BuiltinID == X86::BI__builtin_ia32_kortestchi)
+ C = llvm::Constant::getAllOnesValue(Builder.getInt16Ty());
+ else
+ C = llvm::Constant::getNullValue(Builder.getInt16Ty());
+ Value *Cmp = Builder.CreateICmpEQ(Or, C);
+ return Builder.CreateZExt(Cmp, ConvertType(E->getType()));
+ }
+
case X86::BI__builtin_ia32_kandhi:
return EmitX86MaskLogic(*this, Instruction::And, 16, Ops);
case X86::BI__builtin_ia32_kandnhi:
OpenPOWER on IntegriCloud