diff options
author | Chris Lattner <sabre@nondot.org> | 2002-04-16 22:10:36 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-04-16 22:10:36 +0000 |
commit | 169bffe28abf10344761cb76087f9a6209611659 (patch) | |
tree | 368148e9bd476b297f6c56eca8ff5d6988c36a35 /lib/Transforms/TransformInternals.cpp | |
parent | f759c4e2a7ccc84c4ed85b7db27cff1bcc2aa1f2 (diff) |
* Clean up the code a bit
* Allow structs with negative offsets. This enables the em3d benchmark to
be made typesafe. In this case, the struct had an array as the first
element, so a negative index was ok (the expr was -8 + 8x)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2271 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/TransformInternals.cpp')
-rw-r--r-- | lib/Transforms/TransformInternals.cpp | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/lib/Transforms/TransformInternals.cpp b/lib/Transforms/TransformInternals.cpp index 06fa27822f..55b9dda67e 100644 --- a/lib/Transforms/TransformInternals.cpp +++ b/lib/Transforms/TransformInternals.cpp @@ -161,15 +161,12 @@ const Type *ConvertableToGEP(const Type *Ty, Value *OffsetVal, // analysis::ExprType Expr = analysis::ClassifyExpression(OffsetVal); - // Get the offset and scale now... + // Get the offset and scale values if they exists... // A scale of zero with Expr.Var != 0 means a scale of 1. // - int Offset = 0; - int Scale = 0; + int Offset = Expr.Offset ? getConstantValue(Expr.Offset) : 0; + int Scale = Expr.Scale ? getConstantValue(Expr.Scale) : 0; - // Get the offset and scale values if they exists... - if (Expr.Offset) Offset = getConstantValue(Expr.Offset); - if (Expr.Scale) Scale = getConstantValue(Expr.Scale); if (Expr.Var && Scale == 0) Scale = 1; // Scale != 0 if Expr.Var != 0 // Loop over the Scale and Offset values, filling in the Indices vector for @@ -182,9 +179,8 @@ const Type *ConvertableToGEP(const Type *Ty, Value *OffsetVal, CompTy = cast<CompositeType>(NextTy); if (const StructType *StructTy = dyn_cast<StructType>(CompTy)) { - if (Offset < 0) return 0; // Can't index negatively into structure // Step into the appropriate element of the structure... - unsigned ActualOffset = (unsigned)Offset; + unsigned ActualOffset = (Offset < 0) ? 0 : (unsigned)Offset; NextTy = getStructOffsetStep(StructTy, ActualOffset, Indices); Offset -= ActualOffset; } else { |