Generate code for some more intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44839 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CGBuiltin.cpp b/CodeGen/CGBuiltin.cpp
index 875e56e..8cbdce5 100644
--- a/CodeGen/CGBuiltin.cpp
+++ b/CodeGen/CGBuiltin.cpp
@@ -204,6 +204,44 @@
return Builder.CreateMul(EmitScalarExpr(E->getArg(0)),
EmitScalarExpr(E->getArg(1)),
"mulps");
+ case X86::BI__builtin_ia32_pand:
+ return Builder.CreateAnd(EmitScalarExpr(E->getArg(0)),
+ EmitScalarExpr(E->getArg(1)),
+ "pand");
+ case X86::BI__builtin_ia32_por:
+ return Builder.CreateAnd(EmitScalarExpr(E->getArg(0)),
+ EmitScalarExpr(E->getArg(1)),
+ "por");
+ case X86::BI__builtin_ia32_pxor:
+ return Builder.CreateAnd(EmitScalarExpr(E->getArg(0)),
+ EmitScalarExpr(E->getArg(1)),
+ "pxor");
+ case X86::BI__builtin_ia32_pandn:
+ llvm::Value *V1 = Builder.CreateNot(EmitScalarExpr(E->getArg(0)), "tmp");
+ return Builder.CreateAnd(V1, EmitScalarExpr(E->getArg(1)), "pandn");
+ case X86::BI__builtin_ia32_paddb:
+ case X86::BI__builtin_ia32_paddd:
+ case X86::BI__builtin_ia32_paddq:
+ case X86::BI__builtin_ia32_paddw:
+ return Builder.CreateAdd(EmitScalarExpr(E->getArg(0)),
+ EmitScalarExpr(E->getArg(1)), "padd");
+ case X86::BI__builtin_ia32_psubb:
+ case X86::BI__builtin_ia32_psubd:
+ case X86::BI__builtin_ia32_psubq:
+ case X86::BI__builtin_ia32_psubw:
+ return Builder.CreateSub(EmitScalarExpr(E->getArg(0)),
+ EmitScalarExpr(E->getArg(1)), "psub");
+ case X86::BI__builtin_ia32_pshufd: {
+ llvm::Value *V = EmitScalarExpr(E->getArg(0));
+ llvm::ConstantInt *I =
+ cast<llvm::ConstantInt>(EmitScalarExpr(E->getArg(1)));
+ int i = I->getZExtValue();
+
+ return EmitShuffleVector(V, V,
+ i & 0x3, (i & 0xc) >> 2,
+ (i & 0x30) >> 4, (i & 0xc0) >> 6,
+ "pshufd");
+ }
}
}