Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // | 1 // |
| 2 // The Subzero Code Generator | 2 // The Subzero Code Generator |
| 3 // | 3 // |
| 4 // This file is distributed under the University of Illinois Open Source | 4 // This file is distributed under the University of Illinois Open Source |
| 5 // License. See LICENSE.TXT for details. | 5 // License. See LICENSE.TXT for details. |
| 6 // | 6 // |
| 7 //===----------------------------------------------------------------------===// | 7 //===----------------------------------------------------------------------===// |
| 8 /// | 8 /// |
| 9 /// \file | 9 /// \file |
| 10 /// \brief Implements the TargetLoweringMIPS32 class, which consists almost | 10 /// \brief Implements the TargetLoweringMIPS32 class, which consists almost |
| (...skipping 2155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2166 llvm_unreachable("Invalid ICmp operator"); | 2166 llvm_unreachable("Invalid ICmp operator"); |
| 2167 return; | 2167 return; |
| 2168 } | 2168 } |
| 2169 } | 2169 } |
| 2170 | 2170 |
| 2171 void TargetMIPS32::lowerInsertElement(const InstInsertElement *Instr) { | 2171 void TargetMIPS32::lowerInsertElement(const InstInsertElement *Instr) { |
| 2172 UnimplementedLoweringError(this, Instr); | 2172 UnimplementedLoweringError(this, Instr); |
| 2173 } | 2173 } |
| 2174 | 2174 |
| 2175 void TargetMIPS32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { | 2175 void TargetMIPS32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
| 2176 Variable *Dest = Instr->getDest(); | |
| 2177 Type DestTy = (Dest != nullptr) ? Dest->getType() : IceType_void; | |
|
Jim Stichnoth
2016/09/09 17:12:41
I would do it more like this:
const Type DestTy
obucinac
2016/09/09 17:39:40
Done.
| |
| 2176 switch (Instr->getIntrinsicInfo().ID) { | 2178 switch (Instr->getIntrinsicInfo().ID) { |
| 2177 case Intrinsics::AtomicCmpxchg: { | 2179 case Intrinsics::AtomicCmpxchg: { |
| 2178 UnimplementedLoweringError(this, Instr); | 2180 UnimplementedLoweringError(this, Instr); |
| 2179 return; | 2181 return; |
| 2180 } | 2182 } |
| 2181 case Intrinsics::AtomicFence: | 2183 case Intrinsics::AtomicFence: |
| 2182 UnimplementedLoweringError(this, Instr); | 2184 UnimplementedLoweringError(this, Instr); |
| 2183 return; | 2185 return; |
| 2184 case Intrinsics::AtomicFenceAll: | 2186 case Intrinsics::AtomicFenceAll: |
| 2185 // NOTE: FenceAll should prevent and load/store from being moved across the | 2187 // NOTE: FenceAll should prevent and load/store from being moved across the |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 2212 } | 2214 } |
| 2213 case Intrinsics::Ctlz: { | 2215 case Intrinsics::Ctlz: { |
| 2214 UnimplementedLoweringError(this, Instr); | 2216 UnimplementedLoweringError(this, Instr); |
| 2215 return; | 2217 return; |
| 2216 } | 2218 } |
| 2217 case Intrinsics::Cttz: { | 2219 case Intrinsics::Cttz: { |
| 2218 UnimplementedLoweringError(this, Instr); | 2220 UnimplementedLoweringError(this, Instr); |
| 2219 return; | 2221 return; |
| 2220 } | 2222 } |
| 2221 case Intrinsics::Fabs: { | 2223 case Intrinsics::Fabs: { |
| 2222 UnimplementedLoweringError(this, Instr); | 2224 if (isScalarFloatingType(DestTy)) { |
| 2225 Variable *T = makeReg(DestTy); | |
| 2226 if (DestTy == IceType_f32) { | |
| 2227 _abs_s(T, legalizeToReg(Instr->getArg(0))); | |
| 2228 } else { | |
| 2229 _abs_d(T, legalizeToReg(Instr->getArg(0))); | |
| 2230 } | |
| 2231 _mov(Dest, T); | |
| 2232 } | |
| 2223 return; | 2233 return; |
| 2224 } | 2234 } |
| 2225 case Intrinsics::Longjmp: { | 2235 case Intrinsics::Longjmp: { |
| 2226 InstCall *Call = makeHelperCall(RuntimeHelper::H_call_longjmp, nullptr, 2); | 2236 InstCall *Call = makeHelperCall(RuntimeHelper::H_call_longjmp, nullptr, 2); |
| 2227 Call->addArg(Instr->getArg(0)); | 2237 Call->addArg(Instr->getArg(0)); |
| 2228 Call->addArg(Instr->getArg(1)); | 2238 Call->addArg(Instr->getArg(1)); |
| 2229 lowerCall(Call); | 2239 lowerCall(Call); |
| 2230 return; | 2240 return; |
| 2231 } | 2241 } |
| 2232 case Intrinsics::Memcpy: { | 2242 case Intrinsics::Memcpy: { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2272 return; | 2282 return; |
| 2273 } | 2283 } |
| 2274 case Intrinsics::Setjmp: { | 2284 case Intrinsics::Setjmp: { |
| 2275 InstCall *Call = | 2285 InstCall *Call = |
| 2276 makeHelperCall(RuntimeHelper::H_call_setjmp, Instr->getDest(), 1); | 2286 makeHelperCall(RuntimeHelper::H_call_setjmp, Instr->getDest(), 1); |
| 2277 Call->addArg(Instr->getArg(0)); | 2287 Call->addArg(Instr->getArg(0)); |
| 2278 lowerCall(Call); | 2288 lowerCall(Call); |
| 2279 return; | 2289 return; |
| 2280 } | 2290 } |
| 2281 case Intrinsics::Sqrt: { | 2291 case Intrinsics::Sqrt: { |
| 2282 UnimplementedLoweringError(this, Instr); | 2292 if (isScalarFloatingType(DestTy)) { |
| 2293 Variable *T = makeReg(DestTy); | |
| 2294 if (DestTy == IceType_f32) { | |
| 2295 _sqrt_s(T, legalizeToReg(Instr->getArg(0))); | |
| 2296 } else { | |
| 2297 _sqrt_d(T, legalizeToReg(Instr->getArg(0))); | |
| 2298 } | |
| 2299 _mov(Dest, T); | |
| 2300 } | |
| 2283 return; | 2301 return; |
| 2284 } | 2302 } |
| 2285 case Intrinsics::Stacksave: { | 2303 case Intrinsics::Stacksave: { |
| 2286 UnimplementedLoweringError(this, Instr); | 2304 UnimplementedLoweringError(this, Instr); |
| 2287 return; | 2305 return; |
| 2288 } | 2306 } |
| 2289 case Intrinsics::Stackrestore: { | 2307 case Intrinsics::Stackrestore: { |
| 2290 UnimplementedLoweringError(this, Instr); | 2308 UnimplementedLoweringError(this, Instr); |
| 2291 return; | 2309 return; |
| 2292 } | 2310 } |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2729 Str << "\t.set\t" | 2747 Str << "\t.set\t" |
| 2730 << "nomips16\n"; | 2748 << "nomips16\n"; |
| 2731 } | 2749 } |
| 2732 | 2750 |
| 2733 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; | 2751 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; |
| 2734 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; | 2752 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; |
| 2735 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; | 2753 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; |
| 2736 | 2754 |
| 2737 } // end of namespace MIPS32 | 2755 } // end of namespace MIPS32 |
| 2738 } // end of namespace Ice | 2756 } // end of namespace Ice |
| OLD | NEW |