; RUN: opt -scalarrepl %s -disable-output
; RUN: opt -scalarrepl-ssa %s -disable-output

target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-apple-darwin10.0.0"

; PR9017
define void @test1() nounwind readnone ssp {
entry:
  %l_72 = alloca i32*, align 8
  unreachable

for.cond:                                         ; preds = %for.cond
  %tmp1.i = load i32** %l_72, align 8
  store i32* %tmp1.i, i32** %l_72, align 8
  br label %for.cond

if.end:                                           ; No predecessors!
  ret void
}


define void @test2() {
  %E = alloca { { i32, float, double, i64 }, { i32, float, double, i64 } }        ; <{ { i32, float, double, i64 }, { i32, float, double, i64 } }*> [#uses=1]
  %tmp.151 = getelementptr { { i32, float, double, i64 }, { i32, float, double, i64 } }* %E, i64 0, i32 1, i32 3          ; <i64*> [#uses=0]
  ret void
}

define i32 @test3() {
        %X = alloca { [4 x i32] }               ; <{ [4 x i32] }*> [#uses=1]
        %Y = getelementptr { [4 x i32] }* %X, i64 0, i32 0, i64 2               ; <i32*> [#uses=2]
        store i32 4, i32* %Y
        %Z = load i32* %Y               ; <i32> [#uses=1]
        ret i32 %Z
}


%struct.rtx_def = type { [2 x i8], i32, [1 x %union.rtunion_def] }
%union.rtunion_def = type { i32 }

define void @test4() {
entry:
        %c_addr.i = alloca i8           ; <i8*> [#uses=1]
        switch i32 0, label %return [
                 i32 36, label %label.7
                 i32 34, label %label.7
                 i32 41, label %label.5
        ]
label.5:                ; preds = %entry
        ret void
label.7:                ; preds = %entry, %entry
        br i1 false, label %then.4, label %switchexit.0
then.4:         ; preds = %label.7
        %tmp.0.i = bitcast i8* %c_addr.i to i32*                ; <i32*> [#uses=1]
        store i32 44, i32* %tmp.0.i
        ret void
switchexit.0:           ; preds = %label.7
        ret void
return:         ; preds = %entry
        ret void
}


define void @test5() {
entry:
        %source_ptr = alloca i8*, align 4               ; <i8**> [#uses=2]
        br i1 false, label %bb1357, label %cond_next583
cond_next583:           ; preds = %entry
        ret void
bb1357:         ; preds = %entry
        br i1 false, label %bb1365, label %bb27055
bb1365:         ; preds = %bb1357
        switch i32 0, label %cond_next10377 [
                 i32 0, label %bb4679
                 i32 1, label %bb4679
                 i32 2, label %bb4679
                 i32 3, label %bb4679
                 i32 4, label %bb5115
                 i32 5, label %bb6651
                 i32 6, label %bb7147
                 i32 7, label %bb8683
                 i32 8, label %bb9131
                 i32 9, label %bb9875
                 i32 10, label %bb4679
                 i32 11, label %bb4859
                 i32 12, label %bb4679
                 i32 16, label %bb10249
        ]
bb4679:         ; preds = %bb1365, %bb1365, %bb1365, %bb1365, %bb1365, %bb1365
        ret void
bb4859:         ; preds = %bb1365
        ret void
bb5115:         ; preds = %bb1365
        ret void
bb6651:         ; preds = %bb1365
        ret void
bb7147:         ; preds = %bb1365
        ret void
bb8683:         ; preds = %bb1365
        ret void
bb9131:         ; preds = %bb1365
        ret void
bb9875:         ; preds = %bb1365
        %source_ptr9884 = bitcast i8** %source_ptr to i8**              ; <i8**> [#uses=1]
        %tmp9885 = load i8** %source_ptr9884            ; <i8*> [#uses=0]
        ret void
bb10249:                ; preds = %bb1365
        %source_ptr10257 = bitcast i8** %source_ptr to i16**            ; <i16**> [#uses=1]
        %tmp10258 = load i16** %source_ptr10257         ; <i16*> [#uses=0]
        ret void
cond_next10377:         ; preds = %bb1365
        ret void
bb27055:                ; preds = %bb1357
        ret void
}


        %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>" = type { %"struct.__gnu_cxx::bitmap_allocator<char>::_Alloc_block"* }
        %"struct.__gnu_cxx::bitmap_allocator<char>" = type { i8 }
        %"struct.__gnu_cxx::bitmap_allocator<char>::_Alloc_block" = type { [8 x i8] }

; PR1045
define void @test6() {
entry:
        %this_addr.i = alloca %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"*                ; <%"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"**> [#uses=3]
        %tmp = alloca %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>", align 4                ; <%"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"*> [#uses=1]
        store %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"* %tmp, %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"** %this_addr.i
        %tmp.i = load %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"** %this_addr.i          ; <%"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"*> [#uses=1]
        %tmp.i.upgrd.1 = bitcast %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"* %tmp.i to %"struct.__gnu_cxx::bitmap_allocator<char>"*              ; <%"struct.__gnu_cxx::bitmap_allocator<char>"*> [#uses=0]
        %tmp1.i = load %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"** %this_addr.i         ; <%"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"*> [#uses=1]
        %tmp.i.upgrd.2 = getelementptr %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"* %tmp1.i, i32 0, i32 0         ; <%"struct.__gnu_cxx::bitmap_allocator<char>::_Alloc_block"**> [#uses=0]
        unreachable
}

        %struct.CGPoint = type { float, float }
        %struct.aal_big_range_t = type { i32, i32 }        %struct.aal_callback_t = type { i8* (i8*, i32)*, void (i8*, i8*)* }        %struct.aal_edge_pool_t = type { %struct.aal_edge_pool_t*, i32, i32, [0 x %struct.aal_edge_t] }        %struct.aal_edge_t = type { %struct.CGPoint, %struct.CGPoint, i32 }
        %struct.aal_range_t = type { i16, i16 }
        %struct.aal_span_pool_t = type { %struct.aal_span_pool_t*, [341 x %struct.aal_span_t] }
        %struct.aal_span_t = type { %struct.aal_span_t*, %struct.aal_big_range_t }
        %struct.aal_spanarray_t = type { [2 x %struct.aal_range_t] }
        %struct.aal_spanbucket_t = type { i16, [2 x i8], %struct.anon }
        %struct.aal_state_t = type { %struct.CGPoint, %struct.CGPoint, %struct.CGPoint, i32, float, float, float, float, %struct.CGPoint, %struct.CGPoint, float, float, float, float, i32, i32, i32, i32, float, float, i8*, i32, i32, %struct.aal_edge_pool_t*, %struct.aal_edge_pool_t*, i8*, %struct.aal_callback_t*, i32, %struct.aal_span_t*, %struct.aal_span_t*, %struct.aal_span_t*, %struct.aal_span_pool_t*, i8, float, i8, i32 }
        %struct.anon = type { %struct.aal_spanarray_t }


declare void @llvm.memcpy.i32(i8*, i8*, i32, i32)

define fastcc void @test7() {
entry:
        %SB = alloca %struct.aal_spanbucket_t, align 4          ; <%struct.aal_spanbucket_t*> [#uses=2]
        br i1 false, label %cond_true, label %cond_next79

cond_true:              ; preds = %entry
        br i1 false, label %cond_next, label %cond_next114.i

cond_next114.i:         ; preds = %cond_true
        ret void

cond_next:              ; preds = %cond_true
        %SB19 = bitcast %struct.aal_spanbucket_t* %SB to i8*            ; <i8*> [#uses=1]
        call void @llvm.memcpy.i32( i8* %SB19, i8* null, i32 12, i32 0 )
        br i1 false, label %cond_next34, label %cond_next79

cond_next34:            ; preds = %cond_next
        %i.2.reload22 = load i32* null          ; <i32> [#uses=1]
        %tmp51 = getelementptr %struct.aal_spanbucket_t* %SB, i32 0, i32 2, i32 0, i32 0, i32 %i.2.reload22, i32 1      
        ; <i16*> [#uses=0]
        ret void

cond_next79:            ; preds = %cond_next, %entry
        ret void
}


       %struct.c37304a__vrec = type { i8, %struct.c37304a__vrec___disc___XVN }
        %struct.c37304a__vrec___disc___XVN = type {
%struct.c37304a__vrec___disc___XVN___O }
        %struct.c37304a__vrec___disc___XVN___O = type {  }

; PR3304
define void @test8() {
entry:
        %v = alloca %struct.c37304a__vrec
        %0 = getelementptr %struct.c37304a__vrec* %v, i32 0, i32 0             
        store i8 8, i8* %0, align 1
        unreachable
}



; rdar://6808691 - ZeroLengthMemSet
        type <{ i32, i16, i8, i8, i64, i64, i16, [0 x i16] }>           

define i32 @test9() {
entry:
        %.compoundliteral = alloca %0           
        %tmp228 = getelementptr %0* %.compoundliteral, i32 0, i32 7
        %tmp229 = bitcast [0 x i16]* %tmp228 to i8*             
        call void @llvm.memset.i64(i8* %tmp229, i8 0, i64 0, i32 2)
        unreachable
}

declare void @llvm.memset.i64(i8* nocapture, i8, i64, i32) nounwind


; PR4146 - i1 handling
%wrapper = type { i1 }
define void @test10() {
entry:
        %w = alloca %wrapper, align 8           ; <%wrapper*> [#uses=1]
        %0 = getelementptr %wrapper* %w, i64 0, i32 0           ; <i1*>
        store i1 true, i1* %0
        ret void
}


        %struct.singlebool = type <{ i8 }>
; PR4286
define zeroext i8 @test11() nounwind {
entry:
        %a = alloca %struct.singlebool, align 1         ; <%struct.singlebool*> [#uses=2]
        %storetmp.i = bitcast %struct.singlebool* %a to i1*             ; <i1*> [#uses=1]
        store i1 true, i1* %storetmp.i
        %tmp = getelementptr %struct.singlebool* %a, i64 0, i32 0               ; <i8*> [#uses=1]
        %tmp1 = load i8* %tmp           ; <i8> [#uses=1]
        ret i8 %tmp1
}


       %struct.Item = type { [4 x i16], %struct.rule* }
        %struct.rule = type { [4 x i16], i32, i32, i32, %struct.nonterminal*, %struct.pattern*, i8 }
        %struct.nonterminal = type { i8*, i32, i32, i32, %struct.plankMap*, %struct.rule* }
        %struct.plankMap = type { %struct.list*, i32, %struct.stateMap* }
        %struct.list = type { i8*, %struct.list* }
        %struct.stateMap = type { i8*, %struct.plank*, i32, i16* }
        %struct.plank = type { i8*, %struct.list*, i32 }
        %struct.pattern = type { %struct.nonterminal*, %struct.operator*, [2 x %struct.nonterminal*] }
        %struct.operator = type { i8*, i8, i32, i32, i32, i32, %struct.table* }
        %struct.table = type { %struct.operator*, %struct.list*, i16*, [2 x %struct.dimension*], %struct.item_set** }
        %struct.dimension = type { i16*, %struct.Index_Map, %struct.mapping*, i32, %struct.plankMap* }
        %struct.Index_Map = type { i32, %struct.item_set** }
        %struct.item_set = type { i32, i32, %struct.operator*, [2 x %struct.item_set*], %struct.item_set*, i16*, %struct.Item*, %struct.Item* }
        %struct.mapping = type { %struct.list**, i32, i32, i32, %struct.item_set** }

; VLAs.
define void @test12() {
bb4.i:
        %0 = malloc [0 x %struct.Item]          ; <[0 x %struct.Item]*> [#uses=1]
        %.sub.i.c.i = getelementptr [0 x %struct.Item]* %0, i32 0, i32 0                ; <%struct.Item*> [#uses=0]
        unreachable
}

; PR8680
define void @test13() nounwind {
entry:
  %memtmp = alloca i32, align 4
  %0 = bitcast i32* %memtmp to void ()*
  call void %0() nounwind
  ret void
}
