Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Greene <hippiehunterenator@gmail.com>2018-05-15 00:29:55 +0300
committerMorgan Brown <morganbr@users.noreply.github.com>2018-05-15 00:29:55 +0300
commit3bc92075760d474f64686b86882e532ad66b9780 (patch)
tree4672788182301ca619eca43725121e48effa86ea /src/ILCompiler.WebAssembly
parenta76bf3981ddc79184d9d0e5109cf8e00a1c65b4b (diff)
improved llvm generated variable names (#5794)
Diffstat (limited to 'src/ILCompiler.WebAssembly')
-rw-r--r--src/ILCompiler.WebAssembly/src/CodeGen/EvaluationStack.cs16
-rw-r--r--src/ILCompiler.WebAssembly/src/CodeGen/ILToWebAssemblyImporter.cs82
2 files changed, 53 insertions, 45 deletions
diff --git a/src/ILCompiler.WebAssembly/src/CodeGen/EvaluationStack.cs b/src/ILCompiler.WebAssembly/src/CodeGen/EvaluationStack.cs
index fb510889a..df5ce4bea 100644
--- a/src/ILCompiler.WebAssembly/src/CodeGen/EvaluationStack.cs
+++ b/src/ILCompiler.WebAssembly/src/CodeGen/EvaluationStack.cs
@@ -433,7 +433,7 @@ namespace Internal.IL
protected override LLVMValueRef ValueAsTypeInternal(LLVMTypeRef type, LLVMBuilderRef builder, bool signExtend)
{
//TODO: deal with sign extension here
- return ILImporter.CastIfNecessary(builder, RawLLVMValue, type);
+ return ILImporter.CastIfNecessary(builder, RawLLVMValue, type, Name);
}
}
@@ -456,7 +456,7 @@ namespace Internal.IL
protected override LLVMValueRef ValueAsTypeInternal(LLVMTypeRef type, LLVMBuilderRef builder, bool signExtend)
{
- return ILImporter.LoadValue(builder, RawLLVMValue, Type, type, signExtend);
+ return ILImporter.LoadValue(builder, RawLLVMValue, Type, type, signExtend, $"Load{Name}");
}
}
@@ -479,7 +479,7 @@ namespace Internal.IL
protected override LLVMValueRef ValueAsTypeInternal(LLVMTypeRef type, LLVMBuilderRef builder, bool signExtend)
{
- return ILImporter.CastIfNecessary(builder, RawLLVMValue, type);
+ return ILImporter.CastIfNecessary(builder, RawLLVMValue, type, Name);
}
}
@@ -529,7 +529,7 @@ namespace Internal.IL
if (RawLLVMValue.Pointer == IntPtr.Zero)
throw new NullReferenceException();
- return ILImporter.CastIfNecessary(builder, RawLLVMValue, type);
+ return ILImporter.CastIfNecessary(builder, RawLLVMValue, type, Name);
}
}
@@ -581,4 +581,12 @@ namespace Internal.IL
return new SpilledExpressionEntry(Kind, Name, Type, LocalIndex, _importer);
}
}
+
+ internal static class StackEntryExtensions
+ {
+ public static string Name(this StackEntry entry)
+ {
+ return (entry as ExpressionEntry)?.Name;
+ }
+ }
}
diff --git a/src/ILCompiler.WebAssembly/src/CodeGen/ILToWebAssemblyImporter.cs b/src/ILCompiler.WebAssembly/src/CodeGen/ILToWebAssemblyImporter.cs
index 53d9d9e75..c512583b1 100644
--- a/src/ILCompiler.WebAssembly/src/CodeGen/ILToWebAssemblyImporter.cs
+++ b/src/ILCompiler.WebAssembly/src/CodeGen/ILToWebAssemblyImporter.cs
@@ -344,25 +344,25 @@ namespace Internal.IL
private void ImportLoadVar(int index, bool argument)
{
LLVMValueRef typedLoadLocation = LoadVarAddress(index, argument ? LocalVarKind.Argument : LocalVarKind.Local, out TypeDesc type);
- PushLoadExpression(GetStackValueKind(type), "ld" + (argument ? "arg" : "loc") + index + "_", typedLoadLocation, type);
+ PushLoadExpression(GetStackValueKind(type), (argument ? "arg" : "loc") + index + "_", typedLoadLocation, type);
}
private LLVMValueRef LoadTemp(int index)
{
LLVMValueRef address = LoadVarAddress(index, LocalVarKind.Temp, out TypeDesc type);
- return LLVM.BuildLoad(_builder, CastToPointerToTypeDesc(address, type), "ldtemp");
+ return LLVM.BuildLoad(_builder, CastToPointerToTypeDesc(address, type, $"Temp{index}_"), $"LdTemp{index}_");
}
internal LLVMValueRef LoadTemp(int index, LLVMTypeRef asType)
{
LLVMValueRef address = LoadVarAddress(index, LocalVarKind.Temp, out TypeDesc type);
- return LLVM.BuildLoad(_builder, CastIfNecessary(address, LLVM.PointerType(asType, 0)), "ldtemp");
+ return LLVM.BuildLoad(_builder, CastIfNecessary(address, LLVM.PointerType(asType, 0), $"Temp{index}_"), $"LdTemp{index}_");
}
- private void StoreTemp(int index, LLVMValueRef value)
+ private void StoreTemp(int index, LLVMValueRef value, string name = null)
{
LLVMValueRef address = LoadVarAddress(index, LocalVarKind.Temp, out TypeDesc type);
- LLVM.BuildStore(_builder, CastToTypeDesc(value, type), CastToPointerToTypeDesc(address, type));
+ LLVM.BuildStore(_builder, CastToTypeDesc(value, type, name), CastToPointerToTypeDesc(address, type, $"Temp{index}_"));
}
internal static LLVMValueRef LoadValue(LLVMBuilderRef builder, LLVMValueRef address, TypeDesc sourceType, LLVMTypeRef targetType, bool signExtend, string loadName = null)
@@ -467,7 +467,7 @@ namespace Internal.IL
return LLVM.BuildGEP(_builder, LLVM.GetFirstParam(_llvmFunction),
new LLVMValueRef[] { LLVM.ConstInt(LLVM.Int32Type(), (uint)(varBase + varOffset), LLVMMisc.False) },
- String.Empty);
+ $"{kind}{index}_");
}
@@ -517,47 +517,47 @@ namespace Internal.IL
TypeDesc varType;
StackEntry toStore = _stack.Pop();
LLVMValueRef varAddress = LoadVarAddress(index, argument ? LocalVarKind.Argument : LocalVarKind.Local, out varType);
- CastingStore(varAddress, toStore, varType);
+ CastingStore(varAddress, toStore, varType, $"Variable{index}_");
}
- private void ImportStoreHelper(LLVMValueRef toStore, LLVMTypeRef valueType, LLVMValueRef basePtr, uint offset)
+ private void ImportStoreHelper(LLVMValueRef toStore, LLVMTypeRef valueType, LLVMValueRef basePtr, uint offset, string name = null)
{
- LLVMValueRef typedToStore = CastIfNecessary(toStore, valueType);
+ LLVMValueRef typedToStore = CastIfNecessary(toStore, valueType, name);
var storeLocation = LLVM.BuildGEP(_builder, basePtr,
new LLVMValueRef[] { LLVM.ConstInt(LLVM.Int32Type(), offset, LLVMMisc.False) },
String.Empty);
- var typedStoreLocation = CastIfNecessary(storeLocation, LLVM.PointerType(valueType, 0));
+ var typedStoreLocation = CastIfNecessary(storeLocation, LLVM.PointerType(valueType, 0), "TypedStore" + (name ?? ""));
LLVM.BuildStore(_builder, typedToStore, typedStoreLocation);
}
- private LLVMValueRef CastToRawPointer(LLVMValueRef source)
+ private LLVMValueRef CastToRawPointer(LLVMValueRef source, string name = null)
{
- return CastIfNecessary(source, LLVM.PointerType(LLVM.Int8Type(), 0));
+ return CastIfNecessary(source, LLVM.PointerType(LLVM.Int8Type(), 0), name);
}
- private LLVMValueRef CastToTypeDesc(LLVMValueRef source, TypeDesc type)
+ private LLVMValueRef CastToTypeDesc(LLVMValueRef source, TypeDesc type, string name = null)
{
- return CastIfNecessary(source, GetLLVMTypeForTypeDesc(type));
+ return CastIfNecessary(source, GetLLVMTypeForTypeDesc(type), (name ?? "") + type.ToString());
}
- private LLVMValueRef CastToPointerToTypeDesc(LLVMValueRef source, TypeDesc type)
+ private LLVMValueRef CastToPointerToTypeDesc(LLVMValueRef source, TypeDesc type, string name = null)
{
- return CastIfNecessary(source, LLVM.PointerType(GetLLVMTypeForTypeDesc(type), 0));
+ return CastIfNecessary(source, LLVM.PointerType(GetLLVMTypeForTypeDesc(type), 0), (name ?? "") + type.ToString());
}
- private void CastingStore(LLVMValueRef address, StackEntry value, TypeDesc targetType)
+ private void CastingStore(LLVMValueRef address, StackEntry value, TypeDesc targetType, string targetName = null)
{
- var typedStoreLocation = CastToPointerToTypeDesc(address, targetType);
+ var typedStoreLocation = CastToPointerToTypeDesc(address, targetType, targetName);
LLVM.BuildStore(_builder, value.ValueAsType(targetType, _builder), typedStoreLocation);
}
- private LLVMValueRef CastIfNecessary(LLVMValueRef source, LLVMTypeRef valueType)
+ private LLVMValueRef CastIfNecessary(LLVMValueRef source, LLVMTypeRef valueType, string name = null)
{
- return CastIfNecessary(_builder, source, valueType);
+ return CastIfNecessary(_builder, source, valueType, name);
}
- internal static LLVMValueRef CastIfNecessary(LLVMBuilderRef builder, LLVMValueRef source, LLVMTypeRef valueType)
+ internal static LLVMValueRef CastIfNecessary(LLVMBuilderRef builder, LLVMValueRef source, LLVMTypeRef valueType, string name = null)
{
LLVMTypeRef sourceType = LLVM.TypeOf(source);
if (sourceType.Pointer == valueType.Pointer)
@@ -569,19 +569,19 @@ namespace Internal.IL
LLVMValueRef typedToStore = source;
if (toStoreKind == LLVMTypeKind.LLVMPointerTypeKind && valueTypeKind == LLVMTypeKind.LLVMPointerTypeKind)
{
- typedToStore = LLVM.BuildPointerCast(builder, source, valueType, "CastIfNecessaryPtr");
+ typedToStore = LLVM.BuildPointerCast(builder, source, valueType, "CastPtr" + (name ?? ""));
}
else if (toStoreKind == LLVMTypeKind.LLVMPointerTypeKind && valueTypeKind == LLVMTypeKind.LLVMIntegerTypeKind)
{
- typedToStore = LLVM.BuildPtrToInt(builder, source, valueType, "CastIfNecessaryInt");
+ typedToStore = LLVM.BuildPtrToInt(builder, source, valueType, "CastInt" + (name ?? ""));
}
else if (toStoreKind == LLVMTypeKind.LLVMIntegerTypeKind && valueTypeKind == LLVMTypeKind.LLVMArrayTypeKind)
{
- typedToStore = LLVM.BuildLoad(builder, CastIfNecessary(builder, source, LLVM.PointerType(valueType, 0)), "CastIfNecessaryArrayLoad");
+ typedToStore = LLVM.BuildLoad(builder, CastIfNecessary(builder, source, LLVM.PointerType(valueType, 0), name), "CastArrayLoad" + (name ?? ""));
}
else if (toStoreKind == LLVMTypeKind.LLVMPointerTypeKind && valueTypeKind == LLVMTypeKind.LLVMArrayTypeKind)
{
- typedToStore = LLVM.BuildLoad(builder, CastIfNecessary(builder, source, LLVM.PointerType(valueType, 0)), "CastIfNecessaryArrayLoad");
+ typedToStore = LLVM.BuildLoad(builder, CastIfNecessary(builder, source, LLVM.PointerType(valueType, 0), name), "CastArrayLoad" + (name ?? ""));
}
else if (toStoreKind == LLVMTypeKind.LLVMPointerTypeKind && valueTypeKind != LLVMTypeKind.LLVMIntegerTypeKind)
{
@@ -589,7 +589,7 @@ namespace Internal.IL
}
else if (toStoreKind == LLVMTypeKind.LLVMIntegerTypeKind && valueTypeKind == LLVMTypeKind.LLVMPointerTypeKind)
{
- typedToStore = LLVM.BuildIntToPtr(builder, source, valueType, "CastIfNecessaryPtr");
+ typedToStore = LLVM.BuildIntToPtr(builder, source, valueType, "CastPtr" + (name ?? ""));
}
else if (toStoreKind != LLVMTypeKind.LLVMIntegerTypeKind && valueTypeKind == LLVMTypeKind.LLVMPointerTypeKind)
{
@@ -597,12 +597,12 @@ namespace Internal.IL
}
else if (toStoreKind == LLVMTypeKind.LLVMFloatTypeKind && valueTypeKind == LLVMTypeKind.LLVMDoubleTypeKind)
{
- typedToStore = LLVM.BuildFPExt(builder, source, valueType, "FloatToDouble");
+ typedToStore = LLVM.BuildFPExt(builder, source, valueType, "CastFloatToDouble" + (name ?? ""));
}
else if (toStoreKind == LLVMTypeKind.LLVMDoubleTypeKind && valueTypeKind == LLVMTypeKind.LLVMFloatTypeKind)
{
- typedToStore = LLVM.BuildFPTrunc(builder, source, valueType, "DoubleToFloat");
+ typedToStore = LLVM.BuildFPTrunc(builder, source, valueType, "CastDoubleToFloat" + (name ?? ""));
}
else if (toStoreKind != valueTypeKind && toStoreKind != LLVMTypeKind.LLVMIntegerTypeKind && valueTypeKind != LLVMTypeKind.LLVMIntegerTypeKind)
{
@@ -611,17 +611,17 @@ namespace Internal.IL
else if (toStoreKind == valueTypeKind && toStoreKind == LLVMTypeKind.LLVMIntegerTypeKind)
{
Debug.Assert(toStoreKind != LLVMTypeKind.LLVMPointerTypeKind && valueTypeKind != LLVMTypeKind.LLVMPointerTypeKind);
- typedToStore = LLVM.BuildIntCast(builder, source, valueType, "CastIfNecessaryInt");
+ typedToStore = LLVM.BuildIntCast(builder, source, valueType, "CastInt" + (name ?? ""));
}
else if (toStoreKind != LLVMTypeKind.LLVMFloatTypeKind && valueTypeKind == LLVMTypeKind.LLVMFloatTypeKind)
{
- typedToStore = LLVM.BuildFPCast(builder, source, valueType, "CastIfNecessaryFloat");
+ typedToStore = LLVM.BuildFPCast(builder, source, valueType, "CastFloat" + (name ?? ""));
}
else if ((toStoreKind == LLVMTypeKind.LLVMDoubleTypeKind || toStoreKind == LLVMTypeKind.LLVMFloatTypeKind) &&
valueTypeKind == LLVMTypeKind.LLVMIntegerTypeKind)
{
//TODO: keep track of the TypeDesc so we can call BuildFPToUI when the integer is unsigned
- typedToStore = LLVM.BuildFPToSI(builder, source, valueType, "CastIfNecessaryFloat");
+ typedToStore = LLVM.BuildFPToSI(builder, source, valueType, "CastFloat" + (name ?? ""));
}
else if (toStoreKind == LLVMTypeKind.LLVMIntegerTypeKind && valueTypeKind == LLVMTypeKind.LLVMDoubleTypeKind)
{
@@ -1032,7 +1032,7 @@ namespace Internal.IL
var vtableSlotSymbol = _compilation.NodeFactory.VTableSlot(method);
_dependencies.Add(vtableSlotSymbol);
LLVMValueRef slot = LoadAddressOfSymbolNode(vtableSlotSymbol);
- return LLVM.BuildLoad(_builder, slot, string.Empty);
+ return LLVM.BuildLoad(_builder, slot, $"{method.Name}_slot");
}
private LLVMValueRef GetCallableVirtualMethod(StackEntry objectPtr, MethodDesc method)
@@ -1052,7 +1052,7 @@ namespace Internal.IL
}
else
{
- var rawObjectPtr = CastIfNecessary(objectPtr.ValueAsType(LLVM.PointerType(LLVM.Int8Type(), 0), _builder), LLVM.PointerType(LLVM.PointerType(LLVM.PointerType(universalSignature, 0), 0), 0));
+ var rawObjectPtr = CastIfNecessary(objectPtr.ValueAsType(LLVM.PointerType(LLVM.Int8Type(), 0), _builder), LLVM.PointerType(LLVM.PointerType(LLVM.PointerType(universalSignature, 0), 0), 0), objectPtr.Name());
var eeType = LLVM.BuildLoad(_builder, rawObjectPtr, "ldEEType");
var slotPtr = LLVM.BuildGEP(_builder, eeType, new LLVMValueRef[] { slot }, "__getslot__");
functionPtr = LLVM.BuildLoad(_builder, slotPtr, "ld__getslot__");
@@ -1495,7 +1495,7 @@ namespace Internal.IL
{
curOffset = PadOffset(method.Signature[i], curOffset);
LLVMValueRef argAddr = LLVM.BuildGEP(builder, shadowStack, new LLVMValueRef[] { LLVM.ConstInt(LLVM.Int32Type(), (ulong)curOffset, LLVMMisc.False) }, "arg" + i);
- LLVM.BuildStore(builder, LLVM.GetParam(thunkFunc, (uint)i), CastIfNecessary(builder, argAddr, LLVM.PointerType(llvmParams[i], 0)));
+ LLVM.BuildStore(builder, LLVM.GetParam(thunkFunc, (uint)i), CastIfNecessary(builder, argAddr, LLVM.PointerType(llvmParams[i], 0), $"parameter{i}_"));
curOffset = PadNextOffset(method.Signature[i], curOffset);
}
@@ -1509,7 +1509,7 @@ namespace Internal.IL
if (method.Signature.ReturnType != compilation.TypeSystemContext.GetWellKnownType(WellKnownType.Void))
{
- LLVM.BuildRet(builder, LLVM.BuildLoad(builder, CastIfNecessary(builder, shadowStack, LLVM.PointerType(GetLLVMTypeForTypeDesc(method.Signature.ReturnType), 0)), ""));
+ LLVM.BuildRet(builder, LLVM.BuildLoad(builder, CastIfNecessary(builder, shadowStack, LLVM.PointerType(GetLLVMTypeForTypeDesc(method.Signature.ReturnType), 0)), "returnValue"));
}
else
{
@@ -1737,7 +1737,7 @@ namespace Internal.IL
}
LLVMValueRef pointerElementType = pointer.ValueAsType(type.MakePointerType(), _builder);
- _stack.Push(new LoadExpressionEntry(type != null ? GetStackValueKind(type) : StackValueKind.ByRef, "ldind",
+ _stack.Push(new LoadExpressionEntry(type != null ? GetStackValueKind(type) : StackValueKind.ByRef, $"Indirect{pointer.Name()}",
pointerElementType, type));
}
@@ -2023,7 +2023,7 @@ namespace Internal.IL
// Load the value and then convert it instead of using ValueAsType to avoid loading the incorrect size
LLVMValueRef loadedValue = value.ValueAsType(value.Type, _builder);
- LLVMValueRef converted = CastIfNecessary(loadedValue, GetLLVMTypeForTypeDesc(destType));
+ LLVMValueRef converted = CastIfNecessary(loadedValue, GetLLVMTypeForTypeDesc(destType), value.Name());
PushExpression(GetStackValueKind(destType), "conv", converted, destType);
}
@@ -2351,14 +2351,14 @@ namespace Internal.IL
{
FieldDesc field = (FieldDesc)_methodIL.GetObject(token);
LLVMValueRef fieldAddress = GetFieldAddress(field, isStatic);
- PushLoadExpression(GetStackValueKind(field.FieldType), "ldfld_" + field.Name, fieldAddress, field.FieldType);
+ PushLoadExpression(GetStackValueKind(field.FieldType), $"Field_{field.Name}", fieldAddress, field.FieldType);
}
private void ImportAddressOfField(int token, bool isStatic)
{
FieldDesc field = (FieldDesc)_methodIL.GetObject(token);
LLVMValueRef fieldAddress = GetFieldAddress(field, isStatic);
- _stack.Push(new AddressExpressionEntry(StackValueKind.ByRef, "ldflda", fieldAddress, field.FieldType.MakeByRefType()));
+ _stack.Push(new AddressExpressionEntry(StackValueKind.ByRef, $"FieldAddress_{field.Name}", fieldAddress, field.FieldType.MakeByRefType()));
}
private void ImportStoreField(int token, bool isStatic)
@@ -2472,7 +2472,7 @@ namespace Internal.IL
StackEntry index = _stack.Pop();
StackEntry arrayReference = _stack.Pop();
var nullSafeElementType = elementType ?? GetWellKnownType(WellKnownType.Object);
- PushLoadExpression(GetStackValueKind(nullSafeElementType), "ldelem", GetElementAddress(index.ValueAsInt32(_builder, true), arrayReference.ValueAsType(LLVM.PointerType(LLVM.Int8Type(), 0), _builder), nullSafeElementType), nullSafeElementType);
+ PushLoadExpression(GetStackValueKind(nullSafeElementType), $"{arrayReference.Name()}Element", GetElementAddress(index.ValueAsInt32(_builder, true), arrayReference.ValueAsType(LLVM.PointerType(LLVM.Int8Type(), 0), _builder), nullSafeElementType), nullSafeElementType);
}
private void ImportStoreElement(int token)
@@ -2505,7 +2505,7 @@ namespace Internal.IL
StackEntry index = _stack.Pop();
StackEntry arrayReference = _stack.Pop();
- PushExpression(GetStackValueKind(byRefElement), "ldelema", GetElementAddress(index.ValueAsInt32(_builder, true), arrayReference.ValueAsType(LLVM.PointerType(LLVM.Int8Type(), 0), _builder), elementType), byRefElement);
+ PushExpression(GetStackValueKind(byRefElement), $"{arrayReference.Name()}ElementAddress", GetElementAddress(index.ValueAsInt32(_builder, true), arrayReference.ValueAsType(LLVM.PointerType(LLVM.Int8Type(), 0), _builder), elementType), byRefElement);
}
private LLVMValueRef GetElementAddress(LLVMValueRef elementPosition, LLVMValueRef arrayReference, TypeDesc arrayElementType)