Index = GetLinearExpression(Index, IndexScale, IndexOffset, ZExtBits,
SExtBits, DL, 0, AC, DT, NSW, NUW);
+ // All GEP math happens in the width of the pointer type,
+ // so we can truncate the value to 64-bits as we don't handle
+ // currently pointers larger than 64 bits and we would crash
+ // later. TODO: Make `Scale` an APInt to avoid this problem.
+ if (IndexScale.getBitWidth() > 64)
+ IndexScale = IndexScale.sextOrTrunc(64);
+
// The GEP index scale ("Scale") scales C1*V+C2, yielding (C1*V+C2)*Scale.
// This gives us an aggregate computation of (C1*Scale)*V + C2*Scale.
Decomposed.OtherOffset += IndexOffset.getSExtValue() * Scale;
--- /dev/null
+; RUN: opt %s -aa-eval -disable-output 2>&1 | FileCheck %s
+
+; CHECK: 6 Total Alias Queries Performed
+; CHECK-NEXT: 6 no alias responses
+
+define void @patatino() {
+BB:
+ %G22 = getelementptr i1*, i1** undef, i8 -1
+ %B1 = mul i66 undef, 9223372036854775808
+ %G45 = getelementptr i1**, i1*** undef, i66 %B1
+ ret void
+}