Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: lib/CodeGen/CGExprScalar.cpp

Issue 7824006: [clang] Conditionally include target intrinsics, based on --enable-target Base URL: https://llvm.org/svn/llvm-project/cfe/trunk/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/CodeGen/CGBuiltin.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===--- CGExprScalar.cpp - Emit LLVM Code for Scalar Exprs ---------------===// 1 //===--- CGExprScalar.cpp - Emit LLVM Code for Scalar Exprs ---------------===//
2 // 2 //
3 // The LLVM Compiler Infrastructure 3 // The LLVM Compiler Infrastructure
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // This contains code to emit Expr nodes with scalar LLVM types as LLVM code. 10 // This contains code to emit Expr nodes with scalar LLVM types as LLVM code.
(...skipping 2054 matching lines...) Expand 10 before | Expand all | Expand 10 after
2065 return Builder.CreateLShr(Ops.LHS, RHS, "shr"); 2065 return Builder.CreateLShr(Ops.LHS, RHS, "shr");
2066 return Builder.CreateAShr(Ops.LHS, RHS, "shr"); 2066 return Builder.CreateAShr(Ops.LHS, RHS, "shr");
2067 } 2067 }
2068 2068
2069 enum IntrinsicType { VCMPEQ, VCMPGT }; 2069 enum IntrinsicType { VCMPEQ, VCMPGT };
2070 // return corresponding comparison intrinsic for given vector type 2070 // return corresponding comparison intrinsic for given vector type
2071 static llvm::Intrinsic::ID GetIntrinsic(IntrinsicType IT, 2071 static llvm::Intrinsic::ID GetIntrinsic(IntrinsicType IT,
2072 BuiltinType::Kind ElemKind) { 2072 BuiltinType::Kind ElemKind) {
2073 switch (ElemKind) { 2073 switch (ElemKind) {
2074 default: assert(0 && "unexpected element type"); 2074 default: assert(0 && "unexpected element type");
2075 #if 0
2075 case BuiltinType::Char_U: 2076 case BuiltinType::Char_U:
2076 case BuiltinType::UChar: 2077 case BuiltinType::UChar:
2077 return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequb_p : 2078 return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequb_p :
2078 llvm::Intrinsic::ppc_altivec_vcmpgtub_p; 2079 llvm::Intrinsic::ppc_altivec_vcmpgtub_p;
2079 break; 2080 break;
2080 case BuiltinType::Char_S: 2081 case BuiltinType::Char_S:
2081 case BuiltinType::SChar: 2082 case BuiltinType::SChar:
2082 return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequb_p : 2083 return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequb_p :
2083 llvm::Intrinsic::ppc_altivec_vcmpgtsb_p; 2084 llvm::Intrinsic::ppc_altivec_vcmpgtsb_p;
2084 break; 2085 break;
(...skipping 12 matching lines...) Expand all
2097 break; 2098 break;
2098 case BuiltinType::Int: 2099 case BuiltinType::Int:
2099 case BuiltinType::Long: 2100 case BuiltinType::Long:
2100 return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequw_p : 2101 return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequw_p :
2101 llvm::Intrinsic::ppc_altivec_vcmpgtsw_p; 2102 llvm::Intrinsic::ppc_altivec_vcmpgtsw_p;
2102 break; 2103 break;
2103 case BuiltinType::Float: 2104 case BuiltinType::Float:
2104 return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpeqfp_p : 2105 return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpeqfp_p :
2105 llvm::Intrinsic::ppc_altivec_vcmpgtfp_p; 2106 llvm::Intrinsic::ppc_altivec_vcmpgtfp_p;
2106 break; 2107 break;
2108 #endif
2107 } 2109 }
2108 return llvm::Intrinsic::not_intrinsic; 2110 return llvm::Intrinsic::not_intrinsic;
2109 } 2111 }
2110 2112
2111 Value *ScalarExprEmitter::EmitCompare(const BinaryOperator *E,unsigned UICmpOpc, 2113 Value *ScalarExprEmitter::EmitCompare(const BinaryOperator *E,unsigned UICmpOpc,
2112 unsigned SICmpOpc, unsigned FCmpOpc) { 2114 unsigned SICmpOpc, unsigned FCmpOpc) {
2113 TestAndClearIgnoreResultAssign(); 2115 TestAndClearIgnoreResultAssign();
2114 Value *Result; 2116 Value *Result;
2115 QualType LHSTy = E->getLHS()->getType(); 2117 QualType LHSTy = E->getLHS()->getType();
2116 if (const MemberPointerType *MPT = LHSTy->getAs<MemberPointerType>()) { 2118 if (const MemberPointerType *MPT = LHSTy->getAs<MemberPointerType>()) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2155 ID = GetIntrinsic(VCMPGT, ElementKind); 2157 ID = GetIntrinsic(VCMPGT, ElementKind);
2156 std::swap(FirstVecArg, SecondVecArg); 2158 std::swap(FirstVecArg, SecondVecArg);
2157 break; 2159 break;
2158 case BO_GT: 2160 case BO_GT:
2159 CR6 = CR6_LT; 2161 CR6 = CR6_LT;
2160 ID = GetIntrinsic(VCMPGT, ElementKind); 2162 ID = GetIntrinsic(VCMPGT, ElementKind);
2161 break; 2163 break;
2162 case BO_LE: 2164 case BO_LE:
2163 if (ElementKind == BuiltinType::Float) { 2165 if (ElementKind == BuiltinType::Float) {
2164 CR6 = CR6_LT; 2166 CR6 = CR6_LT;
2167 #if defined(TARGET_ENABLED_POWERPC)
2165 ID = llvm::Intrinsic::ppc_altivec_vcmpgefp_p; 2168 ID = llvm::Intrinsic::ppc_altivec_vcmpgefp_p;
2166 std::swap(FirstVecArg, SecondVecArg); 2169 std::swap(FirstVecArg, SecondVecArg);
2170 #else
2171 llvm_unreachable("Using Intrinsic::ppc_altivec_vcmpgefp_p w/out"
2172 " TARGET_ENABLED_POWERPC defined!");
2173 #endif // TARGET_ENABLED_POWERPC
2167 } 2174 }
2168 else { 2175 else {
2169 CR6 = CR6_EQ; 2176 CR6 = CR6_EQ;
2170 ID = GetIntrinsic(VCMPGT, ElementKind); 2177 ID = GetIntrinsic(VCMPGT, ElementKind);
2171 } 2178 }
2172 break; 2179 break;
2173 case BO_GE: 2180 case BO_GE:
2174 if (ElementKind == BuiltinType::Float) { 2181 if (ElementKind == BuiltinType::Float) {
2175 CR6 = CR6_LT; 2182 CR6 = CR6_LT;
2183 #if defined(TARGET_ENABLED_POWERPC)
2176 ID = llvm::Intrinsic::ppc_altivec_vcmpgefp_p; 2184 ID = llvm::Intrinsic::ppc_altivec_vcmpgefp_p;
2185 #else
2186 llvm_unreachable("Using Intrinsic::ppc_altivec_vcmpgefp_p w/out"
2187 " TARGET_ENABLED_POWERPC defined!");
2188 #endif // TARGET_ENABLED_POWERPC
2177 } 2189 }
2178 else { 2190 else {
2179 CR6 = CR6_EQ; 2191 CR6 = CR6_EQ;
2180 ID = GetIntrinsic(VCMPGT, ElementKind); 2192 ID = GetIntrinsic(VCMPGT, ElementKind);
2181 std::swap(FirstVecArg, SecondVecArg); 2193 std::swap(FirstVecArg, SecondVecArg);
2182 } 2194 }
2183 break; 2195 break;
2184 } 2196 }
2185 2197
2186 Value *CR6Param = Builder.getInt32(CR6); 2198 Value *CR6Param = Builder.getInt32(CR6);
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
2749 case BO_LAnd: 2761 case BO_LAnd:
2750 case BO_LOr: 2762 case BO_LOr:
2751 case BO_Assign: 2763 case BO_Assign:
2752 case BO_Comma: 2764 case BO_Comma:
2753 assert(false && "Not valid compound assignment operators"); 2765 assert(false && "Not valid compound assignment operators");
2754 break; 2766 break;
2755 } 2767 }
2756 2768
2757 llvm_unreachable("Unhandled compound assignment operator"); 2769 llvm_unreachable("Unhandled compound assignment operator");
2758 } 2770 }
OLDNEW
« no previous file with comments | « lib/CodeGen/CGBuiltin.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698