; The global symbol should be legalized
; RUN: llc < %s -march=alpha 

target datalayout = "e-p:64:64"
        %struct.LIST_HELP = type { %struct.LIST_HELP*, i8* }
        %struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i32, [44 x i8] }
        %struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
@clause_SORT = external global [21 x %struct.LIST_HELP*]                ; <[21 x %struct.LIST_HELP*]*> [#uses=0]
@ia_in = external global %struct._IO_FILE*              ; <%struct._IO_FILE**> [#uses=1]
@multvec_j = external global [100 x i32]                ; <[100 x i32]*> [#uses=0]

define void @main(i32 %argc) {
clock_Init.exit:
        %tmp.5.i575 = load i32* null            ; <i32> [#uses=1]
        %tmp.309 = icmp eq i32 %tmp.5.i575, 0           ; <i1> [#uses=1]
        br i1 %tmp.309, label %UnifiedReturnBlock, label %then.17

then.17:                ; preds = %clock_Init.exit
        store %struct._IO_FILE* null, %struct._IO_FILE** @ia_in
        %savedstack = call i8* @llvm.stacksave( )               ; <i8*> [#uses=0]
        ret void

UnifiedReturnBlock:             ; preds = %clock_Init.exit
        ret void
}

declare i8* @llvm.stacksave()
