; successful, all cast instructions should be eliminated from this testcase.
;
-; RUN: if as < %s | opt -raise | dis | grep cast
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep-not cast
%Hash = type { { uint, sbyte *, \2 } * *, int (uint) *, int } *
%hash = type { { uint, sbyte *, \2 } * *, int (uint) *, int }
; prevented reg115 from being able to change.
;
-; RUN: if as < %s | opt -raise | dis | grep '= cast' | grep \*
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep '= cast' | grep-not \*
%Hash = type { { uint, sbyte *, \2 } * *, int (uint) *, int } *
%HashEntry = type { uint, sbyte *, \2 } *
-; RUN: if as < %s | opt -raise | dis | grep '= cast' | grep \*
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep '= cast' | not grep \*
%Hash = type { { uint, sbyte *, \2 } * *, int (uint) *, int } *
%HashEntry = type { uint, sbyte *, \2 } *
%hash_entry = type { uint, sbyte *, \2 * }
implementation
-%Hash "MakeHash"(int %size, int (uint) * %map)
-begin
-bb0: ;[#uses=1]
+%Hash "MakeHash"(int %size, int (uint) * %map) {
%reg112 = malloc sbyte * *, uint 3 ; <sbyte * * *> [#uses=5]
%reg107-uint = cast int %size to uint ; <uint> [#uses=1]
%reg115 = malloc sbyte *, uint %reg107-uint ; <sbyte * *> [#uses=1]
%cast246 = cast sbyte * * * %reg112 to %Hash ; <%Hash> [#uses=1]
ret %Hash %cast246
-end
+}
; x[j*i-12] = j;
; }
-; RUN: if as < %s | opt -raise | dis | grep ' cast ' | grep '*'
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep ' cast ' | not grep '*'
implementation
; return (int*)malloc(i+j);
; }
-; RUN: if as < %s | opt -raise | dis | grep ' cast ' | grep '*'
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep ' cast ' | not grep '*'
implementation
-declare sbyte* "malloc"(uint)
-
-int* "test"(uint %N, uint %M)
-begin
-bb0: ;[#uses=0]
+int* %test(uint %N, uint %M) {
%reg111 = shl uint %N, ubyte 2 ; <uint> [#uses=1]
%reg109 = add uint %reg111, 4 ; <uint> [#uses=1]
%reg114 = shl uint %M, ubyte 2 ; <uint> [#uses=1]
%reg117 = malloc sbyte, uint %reg116 ; <sbyte*> [#uses=1]
%cast221 = cast sbyte* %reg117 to int* ; <int*> [#uses=1]
ret int* %cast221
-end
+}
; This testcase is not level raised properly...
;
-; RUN: if as < %s | opt -raise | dis | grep ' cast ' | grep '*'
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep ' cast ' | not grep '*'
%List = type { int, %List* }
; This testcase should have the cast propogated through the load
; just like a store does...
;
-; RUN: if as < %s | opt -raise | dis | grep ' cast ' | grep '*'
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep ' cast ' | not grep '*'
int "test"(uint * %Ptr) {
%P2 = cast uint *%Ptr to int *
-; RUN: if as < %s | opt -raise | dis | grep '= cast' | grep \*
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep '= cast' | not grep \*
%FILE = type { int, ubyte*, ubyte*, ubyte, ubyte, uint, uint, uint }
; This could be fixed by making all stores add themselves to a list, and check
; their arguments are consistent AFTER all other values are propogated.
-; RUN: if as < %s | opt -raise | dis | grep '= cast'
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | not grep '= cast'
%Tree = type %struct.tree*
%struct.tree = type { int, double, double, %Tree, %Tree, %Tree, %Tree }
; Looks like we don't raise alloca's like we do mallocs
;
-; RUN: if as < %s | opt -raise | dis | grep '= cast' | grep \*
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep '= cast' | not grep \*
implementation ; Functions:
-; RUN: if as < %s | opt -raise | dis | grep 4294967295
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep -v uint | not grep 4294967295
%length_code = uninitialized global [256 x ubyte]
-; RUN: if as < %s | opt -raise | dis | grep call | grep \.\.\.
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | grep call | not grep '\.\.\.'
implementation
; This testcase should be able to eliminate at least one of the casts.
;
-; RUN: if as < %s | opt -raise | dis | grep 'REMOVE'
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | not grep 'REMOVE'
int %foo(sbyte * %PF) {
%UPF = cast sbyte* %PF to uint()*
-; RUN: if as < %s | opt -raise | dis | grep cast
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | not grep cast
void %test(...) { ret void }
; The expr analysis routines were being too aggressive across cast instructions!
-; RUN: if as < %s | opt -raise | dis | grep 4294967295
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: as < %s | opt -raise | dis | not grep 4294967295
target endian = big
target pointersize = 64