diff options
author | ed <ed@FreeBSD.org> | 2009-06-07 09:21:25 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2009-06-07 09:21:25 +0000 |
commit | 2ae812c77b393190175c91233c3348f526ddab1b (patch) | |
tree | 57fdd33d153490269ca615ac308de731d00669da /lib/CodeGen/CGBuiltin.cpp | |
parent | 265c92560db8af7e64dc328cb612076086a62bd1 (diff) | |
download | FreeBSD-src-2ae812c77b393190175c91233c3348f526ddab1b.zip FreeBSD-src-2ae812c77b393190175c91233c3348f526ddab1b.tar.gz |
Import Clang r73021.
Diffstat (limited to 'lib/CodeGen/CGBuiltin.cpp')
-rw-r--r-- | lib/CodeGen/CGBuiltin.cpp | 221 |
1 files changed, 0 insertions, 221 deletions
diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index d813bba..3c7c5e5 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -625,81 +625,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, switch (BuiltinID) { default: return 0; - case X86::BI__builtin_ia32_mulps: - return Builder.CreateMul(Ops[0], Ops[1], "mulps"); - case X86::BI__builtin_ia32_mulpd: - return Builder.CreateMul(Ops[0], Ops[1], "mulpd"); - case X86::BI__builtin_ia32_pand: - case X86::BI__builtin_ia32_pand128: - return Builder.CreateAnd(Ops[0], Ops[1], "pand"); - case X86::BI__builtin_ia32_por: - case X86::BI__builtin_ia32_por128: - return Builder.CreateOr(Ops[0], Ops[1], "por"); - case X86::BI__builtin_ia32_pxor: - case X86::BI__builtin_ia32_pxor128: - return Builder.CreateXor(Ops[0], Ops[1], "pxor"); - case X86::BI__builtin_ia32_pandn: - case X86::BI__builtin_ia32_pandn128: - Ops[0] = Builder.CreateNot(Ops[0], "tmp"); - return Builder.CreateAnd(Ops[0], Ops[1], "pandn"); - case X86::BI__builtin_ia32_paddb: - case X86::BI__builtin_ia32_paddb128: - case X86::BI__builtin_ia32_paddd: - case X86::BI__builtin_ia32_paddd128: - case X86::BI__builtin_ia32_paddq: - case X86::BI__builtin_ia32_paddq128: - case X86::BI__builtin_ia32_paddw: - case X86::BI__builtin_ia32_paddw128: - case X86::BI__builtin_ia32_addps: - case X86::BI__builtin_ia32_addpd: - return Builder.CreateAdd(Ops[0], Ops[1], "add"); - case X86::BI__builtin_ia32_psubb: - case X86::BI__builtin_ia32_psubb128: - case X86::BI__builtin_ia32_psubd: - case X86::BI__builtin_ia32_psubd128: - case X86::BI__builtin_ia32_psubq: - case X86::BI__builtin_ia32_psubq128: - case X86::BI__builtin_ia32_psubw: - case X86::BI__builtin_ia32_psubw128: - case X86::BI__builtin_ia32_subps: - case X86::BI__builtin_ia32_subpd: - return Builder.CreateSub(Ops[0], Ops[1], "sub"); - case X86::BI__builtin_ia32_divps: - return Builder.CreateFDiv(Ops[0], Ops[1], "divps"); - case X86::BI__builtin_ia32_divpd: - return Builder.CreateFDiv(Ops[0], Ops[1], "divpd"); - case X86::BI__builtin_ia32_pmullw: - case X86::BI__builtin_ia32_pmullw128: - return Builder.CreateMul(Ops[0], Ops[1], "pmul"); - case X86::BI__builtin_ia32_punpckhbw: - return EmitShuffleVector(Ops[0], Ops[1], 4, 12, 5, 13, 6, 14, 7, 15, - "punpckhbw"); - case X86::BI__builtin_ia32_punpckhbw128: - return EmitShuffleVector(Ops[0], Ops[1], 8, 24, 9, 25, 10, 26, 11, 27, - 12, 28, 13, 29, 14, 30, 15, 31, - "punpckhbw"); - case X86::BI__builtin_ia32_punpckhwd: - return EmitShuffleVector(Ops[0], Ops[1], 2, 6, 3, 7, "punpckhwd"); - case X86::BI__builtin_ia32_punpckhwd128: - return EmitShuffleVector(Ops[0], Ops[1], 4, 12, 5, 13, 6, 14, 7, 15, - "punpckhwd"); - case X86::BI__builtin_ia32_punpckhdq: - return EmitShuffleVector(Ops[0], Ops[1], 1, 3, "punpckhdq"); - case X86::BI__builtin_ia32_punpckhdq128: - return EmitShuffleVector(Ops[0], Ops[1], 2, 6, 3, 7, "punpckhdq"); - case X86::BI__builtin_ia32_punpckhqdq128: - return EmitShuffleVector(Ops[0], Ops[1], 1, 3, "punpckhqdq"); - case X86::BI__builtin_ia32_punpcklbw: - return EmitShuffleVector(Ops[0], Ops[1], 0, 8, 1, 9, 2, 10, 3, 11, - "punpcklbw"); - case X86::BI__builtin_ia32_punpcklwd: - return EmitShuffleVector(Ops[0], Ops[1], 0, 4, 1, 5, "punpcklwd"); - case X86::BI__builtin_ia32_punpckldq: - return EmitShuffleVector(Ops[0], Ops[1], 0, 2, "punpckldq"); - case X86::BI__builtin_ia32_punpckldq128: - return EmitShuffleVector(Ops[0], Ops[1], 0, 4, 1, 5, "punpckldq"); - case X86::BI__builtin_ia32_punpcklqdq128: - return EmitShuffleVector(Ops[0], Ops[1], 0, 2, "punpcklqdq"); case X86::BI__builtin_ia32_pslldi128: case X86::BI__builtin_ia32_psllqi128: case X86::BI__builtin_ia32_psllwi128: @@ -807,46 +732,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, llvm::Function *F = CGM.getIntrinsic(ID); return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), name); } - case X86::BI__builtin_ia32_pshufw: { - unsigned i = cast<ConstantInt>(Ops[1])->getZExtValue(); - return EmitShuffleVector(Ops[0], Ops[0], - i & 0x3, (i & 0xc) >> 2, - (i & 0x30) >> 4, (i & 0xc0) >> 6, - "pshufw"); - } - case X86::BI__builtin_ia32_pshuflw: { - unsigned i = cast<ConstantInt>(Ops[1])->getZExtValue(); - return EmitShuffleVector(Ops[0], Ops[0], - i & 0x3, (i & 0xc) >> 2, - (i & 0x30) >> 4, (i & 0xc0) >> 6, 4, 5, 6, 7, - "pshuflw"); - } - case X86::BI__builtin_ia32_pshufhw: { - unsigned i = cast<ConstantInt>(Ops[1])->getZExtValue(); - return EmitShuffleVector(Ops[0], Ops[0], 0, 1, 2, 3, - 4 + (i & 0x3), 4 + ((i & 0xc) >> 2), - 4 + ((i & 0x30) >> 4), 4 + ((i & 0xc0) >> 6), - "pshufhw"); - } - case X86::BI__builtin_ia32_pshufd: { - unsigned i = cast<ConstantInt>(Ops[1])->getZExtValue(); - return EmitShuffleVector(Ops[0], Ops[0], - i & 0x3, (i & 0xc) >> 2, - (i & 0x30) >> 4, (i & 0xc0) >> 6, - "pshufd"); - } - case X86::BI__builtin_ia32_vec_init_v4hi: - case X86::BI__builtin_ia32_vec_init_v8qi: - case X86::BI__builtin_ia32_vec_init_v2si: - return EmitVector(&Ops[0], Ops.size()); - case X86::BI__builtin_ia32_vec_ext_v2si: - case X86::BI__builtin_ia32_vec_ext_v2di: - case X86::BI__builtin_ia32_vec_ext_v4sf: - case X86::BI__builtin_ia32_vec_ext_v4si: - case X86::BI__builtin_ia32_vec_ext_v8hi: - case X86::BI__builtin_ia32_vec_ext_v4hi: - case X86::BI__builtin_ia32_vec_ext_v2df: - return Builder.CreateExtractElement(Ops[0], Ops[1], "result"); case X86::BI__builtin_ia32_cmpps: { llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse_cmp_ps); return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), "cmpps"); @@ -879,63 +764,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse2_cmp_sd); return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), "cmpsd"); } - case X86::BI__builtin_ia32_movss: - return EmitShuffleVector(Ops[0], Ops[1], 4, 1, 2, 3, "movss"); - case X86::BI__builtin_ia32_shufps: { - unsigned i = cast<ConstantInt>(Ops[2])->getZExtValue(); - return EmitShuffleVector(Ops[0], Ops[1], - i & 0x3, (i & 0xc) >> 2, - ((i & 0x30) >> 4) + 4, - ((i & 0xc0) >> 6) + 4, "shufps"); - } - case X86::BI__builtin_ia32_shufpd: { - unsigned i = cast<ConstantInt>(Ops[2])->getZExtValue(); - return EmitShuffleVector(Ops[0], Ops[1], i & 1, - ((i & 2) >> 1)+2, "shufpd"); - } - case X86::BI__builtin_ia32_punpcklbw128: - return EmitShuffleVector(Ops[0], Ops[1], 0, 16, 1, 17, 2, 18, 3, 19, - 4, 20, 5, 21, 6, 22, 7, 23, - "punpcklbw"); - case X86::BI__builtin_ia32_punpcklwd128: - return EmitShuffleVector(Ops[0], Ops[1], 0, 8, 1, 9, 2, 10, 3, 11, - "punpcklwd"); - case X86::BI__builtin_ia32_movlhps: - return EmitShuffleVector(Ops[0], Ops[1], 0, 1, 4, 5, "movlhps"); - case X86::BI__builtin_ia32_movhlps: - return EmitShuffleVector(Ops[0], Ops[1], 6, 7, 2, 3, "movhlps"); - case X86::BI__builtin_ia32_unpckhps: - return EmitShuffleVector(Ops[0], Ops[1], 2, 6, 3, 7, "unpckhps"); - case X86::BI__builtin_ia32_unpcklps: - return EmitShuffleVector(Ops[0], Ops[1], 0, 4, 1, 5, "unpcklps"); - case X86::BI__builtin_ia32_unpckhpd: - return EmitShuffleVector(Ops[0], Ops[1], 1, 3, "unpckhpd"); - case X86::BI__builtin_ia32_unpcklpd: - return EmitShuffleVector(Ops[0], Ops[1], 0, 2, "unpcklpd"); - case X86::BI__builtin_ia32_movsd: - return EmitShuffleVector(Ops[0], Ops[1], 2, 1, "movsd"); - case X86::BI__builtin_ia32_loadlps: - case X86::BI__builtin_ia32_loadhps: { - // FIXME: This should probably be represented as - // shuffle (dst, (v4f32 (insert undef, (load i64), 0)), shuf mask hi/lo) - const llvm::Type *EltTy = llvm::Type::DoubleTy; - const llvm::Type *VecTy = llvm::VectorType::get(EltTy, 2); - const llvm::Type *OrigTy = Ops[0]->getType(); - unsigned Index = BuiltinID == X86::BI__builtin_ia32_loadlps ? 0 : 1; - llvm::Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, Index); - Ops[1] = Builder.CreateBitCast(Ops[1], llvm::PointerType::getUnqual(EltTy)); - Ops[1] = Builder.CreateLoad(Ops[1], "tmp"); - Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast"); - Ops[0] = Builder.CreateInsertElement(Ops[0], Ops[1], Idx, "loadps"); - return Builder.CreateBitCast(Ops[0], OrigTy, "loadps"); - } - case X86::BI__builtin_ia32_loadlpd: - case X86::BI__builtin_ia32_loadhpd: { - Ops[1] = Builder.CreateLoad(Ops[1], "tmp"); - unsigned Index = BuiltinID == X86::BI__builtin_ia32_loadlpd ? 0 : 1; - llvm::Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, Index); - return Builder.CreateInsertElement(Ops[0], Ops[1], Idx, "loadpd"); - } case X86::BI__builtin_ia32_storehps: case X86::BI__builtin_ia32_storelps: { const llvm::Type *EltTy = llvm::Type::Int64Ty; @@ -977,55 +805,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, return Builder.CreateBitCast(Ops[0], llvm::VectorType::get(llvm::Type::Int32Ty, 4)); } - case X86::BI__builtin_ia32_vec_set_v4hi: - case X86::BI__builtin_ia32_vec_set_v8hi: - return Builder.CreateInsertElement(Ops[0], Ops[1], Ops[2], "pinsrw"); - case X86::BI__builtin_ia32_vec_set_v4si: - return Builder.CreateInsertElement(Ops[0], Ops[1], Ops[2], "pinsrd"); - case X86::BI__builtin_ia32_vec_set_v2di: - return Builder.CreateInsertElement(Ops[0], Ops[1], Ops[2], "pinsrq"); - case X86::BI__builtin_ia32_andps: - case X86::BI__builtin_ia32_andpd: - case X86::BI__builtin_ia32_andnps: - case X86::BI__builtin_ia32_andnpd: - case X86::BI__builtin_ia32_orps: - case X86::BI__builtin_ia32_orpd: - case X86::BI__builtin_ia32_xorpd: - case X86::BI__builtin_ia32_xorps: { - const llvm::Type *ITy = llvm::VectorType::get(llvm::Type::Int32Ty, 4); - const llvm::Type *FTy = Ops[0]->getType(); - Ops[0] = Builder.CreateBitCast(Ops[0], ITy, "bitcast"); - Ops[1] = Builder.CreateBitCast(Ops[1], ITy, "bitcast"); - switch (BuiltinID) { - case X86::BI__builtin_ia32_andps: - Ops[0] = Builder.CreateAnd(Ops[0], Ops[1], "andps"); - break; - case X86::BI__builtin_ia32_andpd: - Ops[0] = Builder.CreateAnd(Ops[0], Ops[1], "andpd"); - break; - case X86::BI__builtin_ia32_andnps: - Ops[0] = Builder.CreateNot(Ops[0], "not"); - Ops[0] = Builder.CreateAnd(Ops[0], Ops[1], "andnps"); - break; - case X86::BI__builtin_ia32_andnpd: - Ops[0] = Builder.CreateNot(Ops[0], "not"); - Ops[0] = Builder.CreateAnd(Ops[0], Ops[1], "andnpd"); - break; - case X86::BI__builtin_ia32_orps: - Ops[0] = Builder.CreateOr(Ops[0], Ops[1], "orps"); - break; - case X86::BI__builtin_ia32_orpd: - Ops[0] = Builder.CreateOr(Ops[0], Ops[1], "orpd"); - break; - case X86::BI__builtin_ia32_xorps: - Ops[0] = Builder.CreateXor(Ops[0], Ops[1], "xorps"); - break; - case X86::BI__builtin_ia32_xorpd: - Ops[0] = Builder.CreateXor(Ops[0], Ops[1], "xorpd"); - break; - } - return Builder.CreateBitCast(Ops[0], FTy, "bitcast"); - } } } |