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

Side by Side Diff: src/IceGlobalContext.cpp

Issue 476323004: Start adding an integrated assembler. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: make fixups part of address Created 6 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 | « src/IceGlobalContext.h ('k') | src/IceInst.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceGlobalContext.cpp - Global context defs ---*- C++ -*-===// 1 //===- subzero/src/IceGlobalContext.cpp - Global context defs ---*- C++ -*-===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
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 file defines aspects of the compilation that persist across 10 // This file defines aspects of the compilation that persist across
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 // The global constant pool bundles individual pools of each type of 102 // The global constant pool bundles individual pools of each type of
103 // interest. 103 // interest.
104 class ConstantPool { 104 class ConstantPool {
105 ConstantPool(const ConstantPool &) LLVM_DELETED_FUNCTION; 105 ConstantPool(const ConstantPool &) LLVM_DELETED_FUNCTION;
106 ConstantPool &operator=(const ConstantPool &) LLVM_DELETED_FUNCTION; 106 ConstantPool &operator=(const ConstantPool &) LLVM_DELETED_FUNCTION;
107 107
108 public: 108 public:
109 ConstantPool() {} 109 ConstantPool() {}
110 TypePool<float, ConstantFloat, true> Floats; 110 TypePool<float, ConstantFloat, true> Floats;
111 TypePool<double, ConstantDouble, true> Doubles; 111 TypePool<double, ConstantDouble, true> Doubles;
112 TypePool<uint64_t, ConstantInteger> Integers; 112 TypePool<uint32_t, ConstantInteger32> Integers32;
113 TypePool<uint64_t, ConstantInteger64> Integers64;
113 TypePool<RelocatableTuple, ConstantRelocatable> Relocatables; 114 TypePool<RelocatableTuple, ConstantRelocatable> Relocatables;
114 UndefPool Undefs; 115 UndefPool Undefs;
115 }; 116 };
116 117
117 GlobalContext::GlobalContext(llvm::raw_ostream *OsDump, 118 GlobalContext::GlobalContext(llvm::raw_ostream *OsDump,
118 llvm::raw_ostream *OsEmit, VerboseMask Mask, 119 llvm::raw_ostream *OsEmit, VerboseMask Mask,
119 TargetArch Arch, OptLevel Opt, 120 TargetArch Arch, OptLevel Opt,
120 IceString TestPrefix, const ClFlags &Flags) 121 IceString TestPrefix, const ClFlags &Flags)
121 : StrDump(OsDump), StrEmit(OsEmit), VMask(Mask), 122 : StrDump(OsDump), StrEmit(OsEmit), VMask(Mask),
122 ConstPool(new ConstantPool()), Arch(Arch), Opt(Opt), 123 ConstPool(new ConstantPool()), Arch(Arch), Opt(Opt),
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 return NewName.data(); 283 return NewName.data();
283 } 284 }
284 285
285 // Transform bar ==> Prefixbar 286 // Transform bar ==> Prefixbar
286 // ^^^^^^ 287 // ^^^^^^
287 return getTestPrefix() + Name; 288 return getTestPrefix() + Name;
288 } 289 }
289 290
290 GlobalContext::~GlobalContext() {} 291 GlobalContext::~GlobalContext() {}
291 292
292 Constant *GlobalContext::getConstantInt(Type Ty, uint64_t ConstantInt64) { 293 Constant *GlobalContext::getConstantInt64(Type Ty, uint64_t ConstantInt64) {
294 assert(Ty == IceType_i64);
295 return ConstPool->Integers64.getOrAdd(this, Ty, ConstantInt64);
296 }
297
298 Constant *GlobalContext::getConstantInt32(Type Ty, uint32_t ConstantInt32) {
293 if (Ty == IceType_i1) 299 if (Ty == IceType_i1)
294 ConstantInt64 &= UINT64_C(1); 300 ConstantInt32 &= UINT32_C(1);
295 return ConstPool->Integers.getOrAdd(this, Ty, ConstantInt64); 301 return ConstPool->Integers32.getOrAdd(this, Ty, ConstantInt32);
296 } 302 }
297 303
298 Constant *GlobalContext::getConstantFloat(float ConstantFloat) { 304 Constant *GlobalContext::getConstantFloat(float ConstantFloat) {
299 return ConstPool->Floats.getOrAdd(this, IceType_f32, ConstantFloat); 305 return ConstPool->Floats.getOrAdd(this, IceType_f32, ConstantFloat);
300 } 306 }
301 307
302 Constant *GlobalContext::getConstantDouble(double ConstantDouble) { 308 Constant *GlobalContext::getConstantDouble(double ConstantDouble) {
303 return ConstPool->Doubles.getOrAdd(this, IceType_f64, ConstantDouble); 309 return ConstPool->Doubles.getOrAdd(this, IceType_f64, ConstantDouble);
304 } 310 }
305 311
306 Constant *GlobalContext::getConstantSym(Type Ty, int64_t Offset, 312 Constant *GlobalContext::getConstantSym(Type Ty, int64_t Offset,
307 const IceString &Name, 313 const IceString &Name,
308 bool SuppressMangling) { 314 bool SuppressMangling) {
309 return ConstPool->Relocatables.getOrAdd( 315 return ConstPool->Relocatables.getOrAdd(
310 this, Ty, RelocatableTuple(Offset, Name, SuppressMangling)); 316 this, Ty, RelocatableTuple(Offset, Name, SuppressMangling));
311 } 317 }
312 318
313 Constant *GlobalContext::getConstantUndef(Type Ty) { 319 Constant *GlobalContext::getConstantUndef(Type Ty) {
314 return ConstPool->Undefs.getOrAdd(this, Ty); 320 return ConstPool->Undefs.getOrAdd(this, Ty);
315 } 321 }
316 322
317 Constant *GlobalContext::getConstantZero(Type Ty) { 323 Constant *GlobalContext::getConstantZero(Type Ty) {
318 switch (Ty) { 324 switch (Ty) {
319 case IceType_i1: 325 case IceType_i1:
320 case IceType_i8: 326 case IceType_i8:
321 case IceType_i16: 327 case IceType_i16:
322 case IceType_i32: 328 case IceType_i32:
329 return getConstantInt32(Ty, 0);
323 case IceType_i64: 330 case IceType_i64:
324 return getConstantInt(Ty, 0); 331 return getConstantInt64(Ty, 0);
325 case IceType_f32: 332 case IceType_f32:
326 return getConstantFloat(0); 333 return getConstantFloat(0);
327 case IceType_f64: 334 case IceType_f64:
328 return getConstantDouble(0); 335 return getConstantDouble(0);
329 case IceType_v4i1: 336 case IceType_v4i1:
330 case IceType_v8i1: 337 case IceType_v8i1:
331 case IceType_v16i1: 338 case IceType_v16i1:
332 case IceType_v16i8: 339 case IceType_v16i8:
333 case IceType_v8i16: 340 case IceType_v8i16:
334 case IceType_v4i32: 341 case IceType_v4i32:
335 case IceType_v4f32: { 342 case IceType_v4f32: {
336 IceString Str; 343 IceString Str;
337 llvm::raw_string_ostream BaseOS(Str); 344 llvm::raw_string_ostream BaseOS(Str);
338 BaseOS << "Unsupported constant type: " << Ty; 345 BaseOS << "Unsupported constant type: " << Ty;
339 llvm_unreachable(BaseOS.str().c_str()); 346 llvm_unreachable(BaseOS.str().c_str());
340 } break; 347 } break;
341 case IceType_void: 348 case IceType_void:
342 case IceType_NUM: 349 case IceType_NUM:
343 break; 350 break;
344 } 351 }
345 llvm_unreachable("Unknown type"); 352 llvm_unreachable("Unknown type");
346 } 353 }
347 354
348 ConstantList GlobalContext::getConstantPool(Type Ty) const { 355 ConstantList GlobalContext::getConstantPool(Type Ty) const {
349 switch (Ty) { 356 switch (Ty) {
350 case IceType_i1: 357 case IceType_i1:
351 case IceType_i8: 358 case IceType_i8:
352 case IceType_i16: 359 case IceType_i16:
353 case IceType_i32: 360 case IceType_i32:
361 return ConstPool->Integers32.getConstantPool();
354 case IceType_i64: 362 case IceType_i64:
355 return ConstPool->Integers.getConstantPool(); 363 return ConstPool->Integers64.getConstantPool();
356 case IceType_f32: 364 case IceType_f32:
357 return ConstPool->Floats.getConstantPool(); 365 return ConstPool->Floats.getConstantPool();
358 case IceType_f64: 366 case IceType_f64:
359 return ConstPool->Doubles.getConstantPool(); 367 return ConstPool->Doubles.getConstantPool();
360 case IceType_v4i1: 368 case IceType_v4i1:
361 case IceType_v8i1: 369 case IceType_v8i1:
362 case IceType_v16i1: 370 case IceType_v16i1:
363 case IceType_v16i8: 371 case IceType_v16i8:
364 case IceType_v8i16: 372 case IceType_v8i16:
365 case IceType_v4i32: 373 case IceType_v4i32:
(...skipping 12 matching lines...) Expand all
378 386
379 void Timer::printElapsedUs(GlobalContext *Ctx, const IceString &Tag) const { 387 void Timer::printElapsedUs(GlobalContext *Ctx, const IceString &Tag) const {
380 if (Ctx->isVerbose(IceV_Timing)) { 388 if (Ctx->isVerbose(IceV_Timing)) {
381 // Prefixing with '#' allows timing strings to be included 389 // Prefixing with '#' allows timing strings to be included
382 // without error in textual assembly output. 390 // without error in textual assembly output.
383 Ctx->getStrDump() << "# " << getElapsedUs() << " usec " << Tag << "\n"; 391 Ctx->getStrDump() << "# " << getElapsedUs() << " usec " << Tag << "\n";
384 } 392 }
385 } 393 }
386 394
387 } // end of namespace Ice 395 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceGlobalContext.h ('k') | src/IceInst.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698