diff options
author | Jeff Greene <hippiehunterenator@gmail.com> | 2018-05-15 00:29:55 +0300 |
---|---|---|
committer | Morgan Brown <morganbr@users.noreply.github.com> | 2018-05-15 00:29:55 +0300 |
commit | 3bc92075760d474f64686b86882e532ad66b9780 (patch) | |
tree | 4672788182301ca619eca43725121e48effa86ea /src/ILCompiler.WebAssembly | |
parent | a76bf3981ddc79184d9d0e5109cf8e00a1c65b4b (diff) |
improved llvm generated variable names (#5794)
Diffstat (limited to 'src/ILCompiler.WebAssembly')
-rw-r--r-- | src/ILCompiler.WebAssembly/src/CodeGen/EvaluationStack.cs | 16 | ||||
-rw-r--r-- | src/ILCompiler.WebAssembly/src/CodeGen/ILToWebAssemblyImporter.cs | 82 |
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) |