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

Side by Side Diff: src/IceGlobalContext.cpp

Issue 641193002: Introduce the notion of function addresses in Subzero. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Clean up code and fix nits. Created 6 years, 2 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
OLDNEW
1 //===- subzero/src/IceGlobalContext.cpp - Global context defs -------------===// 1 //===- subzero/src/IceGlobalContext.cpp - Global context defs -------------===//
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
11 // multiple functions. 11 // multiple functions.
12 // 12 //
13 //===----------------------------------------------------------------------===// 13 //===----------------------------------------------------------------------===//
14 14
15 #include "llvm/ADT/STLExtras.h"
16
15 #include <ctype.h> // isdigit(), isupper() 17 #include <ctype.h> // isdigit(), isupper()
16 #include <locale> // locale 18 #include <locale> // locale
17 19
18 #include "IceCfg.h" 20 #include "IceCfg.h"
19 #include "IceClFlags.h" 21 #include "IceClFlags.h"
20 #include "IceDefs.h" 22 #include "IceDefs.h"
21 #include "IceGlobalContext.h" 23 #include "IceGlobalContext.h"
24 #include "IceGlobalInits.h"
22 #include "IceOperand.h" 25 #include "IceOperand.h"
23 #include "IceTargetLowering.h" 26 #include "IceTargetLowering.h"
24 #include "IceTimerTree.h" 27 #include "IceTimerTree.h"
25 #include "IceTypes.h" 28 #include "IceTypes.h"
26 29
27 namespace Ice { 30 namespace Ice {
28 31
29 // TypePool maps constants of type KeyType (e.g. float) to pointers to 32 // TypePool maps constants of type KeyType (e.g. float) to pointers to
30 // type ValueType (e.g. ConstantFloat). KeyType values are compared 33 // type ValueType (e.g. ConstantFloat). KeyType values are compared
31 // using memcmp() because of potential NaN values in KeyType values. 34 // using memcmp() because of potential NaN values in KeyType values.
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 OrigSuffix.data()); 285 OrigSuffix.data());
283 incrementSubstitutions(NewName); 286 incrementSubstitutions(NewName);
284 return NewName.data(); 287 return NewName.data();
285 } 288 }
286 289
287 // Transform bar ==> Prefixbar 290 // Transform bar ==> Prefixbar
288 // ^^^^^^ 291 // ^^^^^^
289 return getTestPrefix() + Name; 292 return getTestPrefix() + Name;
290 } 293 }
291 294
292 GlobalContext::~GlobalContext() {} 295 GlobalContext::~GlobalContext() {
296 llvm::DeleteContainerPointers(GlobalAddresses);
297 }
293 298
294 Constant *GlobalContext::getConstantInt64(Type Ty, uint64_t ConstantInt64) { 299 Constant *GlobalContext::getConstantInt64(Type Ty, uint64_t ConstantInt64) {
295 assert(Ty == IceType_i64); 300 assert(Ty == IceType_i64);
296 return ConstPool->Integers64.getOrAdd(this, Ty, ConstantInt64); 301 return ConstPool->Integers64.getOrAdd(this, Ty, ConstantInt64);
297 } 302 }
298 303
299 Constant *GlobalContext::getConstantInt32(Type Ty, uint32_t ConstantInt32) { 304 Constant *GlobalContext::getConstantInt32(Type Ty, uint32_t ConstantInt32) {
300 if (Ty == IceType_i1) 305 if (Ty == IceType_i1)
301 ConstantInt32 &= UINT32_C(1); 306 ConstantInt32 &= UINT32_C(1);
302 return ConstPool->Integers32.getOrAdd(this, Ty, ConstantInt32); 307 return ConstPool->Integers32.getOrAdd(this, Ty, ConstantInt32);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 BaseOS << "Unsupported constant type: " << Ty; 383 BaseOS << "Unsupported constant type: " << Ty;
379 llvm_unreachable(BaseOS.str().c_str()); 384 llvm_unreachable(BaseOS.str().c_str());
380 } break; 385 } break;
381 case IceType_void: 386 case IceType_void:
382 case IceType_NUM: 387 case IceType_NUM:
383 break; 388 break;
384 } 389 }
385 llvm_unreachable("Unknown type"); 390 llvm_unreachable("Unknown type");
386 } 391 }
387 392
393 Function *GlobalContext::newFunction(const FuncSigType *Signature,
394 unsigned CallingConv, unsigned Linkage,
395 bool IsProto) {
396 Function *Func = new Function(
397 *Signature, static_cast<llvm::CallingConv::ID>(CallingConv),
398 static_cast<llvm::GlobalValue::LinkageTypes>(Linkage), IsProto);
399 GlobalAddresses.push_back(Func);
400 return Func;
401 }
402
403 GlobalVariable *GlobalContext::newGlobalVariable() {
404 GlobalVariable *Vbl = new GlobalVariable();
jvoung (off chromium) 2014/10/10 01:47:28 Most abbreviations of "Variable" are "Var" in the
Karl 2014/10/10 20:17:30 Done.
405 GlobalAddresses.push_back(Vbl);
406 return Vbl;
407 }
408
388 TimerIdT GlobalContext::getTimerID(TimerStackIdT StackID, 409 TimerIdT GlobalContext::getTimerID(TimerStackIdT StackID,
389 const IceString &Name) { 410 const IceString &Name) {
390 assert(StackID < Timers.size()); 411 assert(StackID < Timers.size());
391 return Timers[StackID].getTimerID(Name); 412 return Timers[StackID].getTimerID(Name);
392 } 413 }
393 414
394 TimerStackIdT GlobalContext::newTimerStackID(const IceString &Name) { 415 TimerStackIdT GlobalContext::newTimerStackID(const IceString &Name) {
395 TimerStackIdT NewID = Timers.size(); 416 TimerStackIdT NewID = Timers.size();
396 Timers.push_back(TimerStack(Name)); 417 Timers.push_back(TimerStack(Name));
397 return NewID; 418 return NewID;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 } 456 }
436 457
437 TimerMarker::TimerMarker(TimerIdT ID, const Cfg *Func) 458 TimerMarker::TimerMarker(TimerIdT ID, const Cfg *Func)
438 : ID(ID), Ctx(Func->getContext()), 459 : ID(ID), Ctx(Func->getContext()),
439 Active(Func->getFocusedTiming() || Ctx->getFlags().SubzeroTimingEnabled) { 460 Active(Func->getFocusedTiming() || Ctx->getFlags().SubzeroTimingEnabled) {
440 if (Active) 461 if (Active)
441 Ctx->pushTimer(ID); 462 Ctx->pushTimer(ID);
442 } 463 }
443 464
444 } // end of namespace Ice 465 } // end of namespace Ice
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698