Chromium Code Reviews| Index: src/IceGlobalContext.cpp |
| diff --git a/src/IceGlobalContext.cpp b/src/IceGlobalContext.cpp |
| index 505ce497b2514090cecacf7dd14597d2caf07c3c..a29d932c35be3a94deb57f70589cd4c366f13f33 100644 |
| --- a/src/IceGlobalContext.cpp |
| +++ b/src/IceGlobalContext.cpp |
| @@ -25,6 +25,7 @@ |
| #include "IceOperand.h" |
| #include "IceTargetLowering.h" |
| #include "IceTimerTree.h" |
| +#include "IceTypes.def" |
| #include "IceTypes.h" |
| #ifdef __clang__ |
| @@ -291,6 +292,18 @@ GlobalContext::GlobalContext(Ostream *OsDump, Ostream *OsEmit, Ostream *OsError, |
| case FT_Iasm: |
| break; |
| } |
| +// Cache up front common constants. |
| +#define X(tag, sizeLog2, align, elts, elty, str, rcstr) \ |
| + ConstZeroForType[IceType_##tag] = installConstantZero(IceType_##tag); |
| + ICETYPE_TABLE; |
| +#undef X |
| + ConstantTrue = installConstantInt1(1); |
| + // Define runtime helper functions. |
| + { |
|
Jim Stichnoth
2016/03/17 00:14:52
Is this set of braces necessary?
Karl
2016/03/17 16:40:53
Removed.
|
| +#define X(Tag, Name) RuntimeHelperFunc[H_##Tag] = getConstantExternSym(Name); |
| + RUNTIME_HELPER_FUNCTIONS_TABLE |
| +#undef X |
| + } |
| TargetLowering::staticInit(this); |
| } |
| @@ -657,24 +670,24 @@ Constant *GlobalContext::getConstantInt(Type Ty, int64_t Value) { |
| return nullptr; |
| } |
| -Constant *GlobalContext::getConstantInt1(int8_t ConstantInt1) { |
| +Constant *GlobalContext::installConstantInt1(int8_t ConstantInt1) { |
|
Jim Stichnoth
2016/03/17 00:14:52
Bikeshed time. I kinda don't like the "install" p
Karl
2016/03/17 16:40:53
Done.
|
| ConstantInt1 &= INT8_C(1); |
| return getConstPool()->Integers1.getOrAdd(this, ConstantInt1); |
| } |
| -Constant *GlobalContext::getConstantInt8(int8_t ConstantInt8) { |
| +Constant *GlobalContext::installConstantInt8(int8_t ConstantInt8) { |
| return getConstPool()->Integers8.getOrAdd(this, ConstantInt8); |
| } |
| -Constant *GlobalContext::getConstantInt16(int16_t ConstantInt16) { |
| +Constant *GlobalContext::installConstantInt16(int16_t ConstantInt16) { |
| return getConstPool()->Integers16.getOrAdd(this, ConstantInt16); |
| } |
| -Constant *GlobalContext::getConstantInt32(int32_t ConstantInt32) { |
| +Constant *GlobalContext::installConstantInt32(int32_t ConstantInt32) { |
| return getConstPool()->Integers32.getOrAdd(this, ConstantInt32); |
| } |
| -Constant *GlobalContext::getConstantInt64(int64_t ConstantInt64) { |
| +Constant *GlobalContext::installConstantInt64(int64_t ConstantInt64) { |
| return getConstPool()->Integers64.getOrAdd(this, ConstantInt64); |
| } |
| @@ -711,39 +724,32 @@ Constant *GlobalContext::getConstantUndef(Type Ty) { |
| } |
| // All locking is done by the getConstant*() target function. |
| -Constant *GlobalContext::getConstantZero(Type Ty) { |
| +Constant *GlobalContext::installConstantZero(Type Ty) { |
| switch (Ty) { |
| case IceType_i1: |
| - return getConstantInt1(0); |
| + return installConstantInt1(0); |
| + break; |
|
Jim Stichnoth
2016/03/17 00:14:52
You don't need all these "break" statements after
Karl
2016/03/17 16:40:53
Done.
|
| case IceType_i8: |
| - return getConstantInt8(0); |
| + return installConstantInt8(0); |
| + break; |
| case IceType_i16: |
| - return getConstantInt16(0); |
| + return installConstantInt16(0); |
| + break; |
| case IceType_i32: |
| - return getConstantInt32(0); |
| + return installConstantInt32(0); |
| + break; |
| case IceType_i64: |
| - return getConstantInt64(0); |
| + return installConstantInt64(0); |
| + break; |
| case IceType_f32: |
| return getConstantFloat(0); |
| + break; |
| case IceType_f64: |
| return getConstantDouble(0); |
| - case IceType_v4i1: |
| - case IceType_v8i1: |
| - case IceType_v16i1: |
| - case IceType_v16i8: |
| - case IceType_v8i16: |
| - case IceType_v4i32: |
| - case IceType_v4f32: { |
| - IceString Str; |
| - llvm::raw_string_ostream BaseOS(Str); |
| - BaseOS << "Unsupported constant type: " << Ty; |
| - llvm_unreachable(BaseOS.str().c_str()); |
| - } break; |
| - case IceType_void: |
| - case IceType_NUM: |
| break; |
| + default: |
| + return nullptr; |
|
Jim Stichnoth
2016/03/17 00:14:52
I kind of like the previous behavior where it give
John
2016/03/17 14:31:33
I also like the previous behavior better, but I am
Karl
2016/03/17 16:40:53
Followed John's advice.
|
| } |
| - llvm_unreachable("Unknown type"); |
| } |
| ConstantList GlobalContext::getConstantPool(Type Ty) { |