--- /dev/null
+; This testcase, which was distilled from a HUGE function, causes problems
+; because both the source and the destination of the %Y cast are converted
+; to a new type, which causes massive problems.
+
+; RUN: as < %s | opt -raise -raise-start-inst=W
+
+int **%test(sbyte **%S) {
+BB0:
+ br label %Loop
+
+Loop:
+ %X = phi sbyte* [null , %BB0], [%Z, %Loop]
+
+ %Y = cast sbyte *%X to sbyte **
+ %Z = load sbyte** %Y
+ br bool true, label %Loop, label %Out
+
+Out:
+ %W = cast sbyte** %Y to int**
+ ret int** %W
+}