; RUN: opt < %s -ipsccp -S | FileCheck %s
; RUN: opt < %s -enable-debugify -ipsccp -debugify-quiet -disable-output

;;======================== test1

define internal i32 @test1a(i32 %A) {
	%X = add i32 1, 2
	ret i32 %A
}
; CHECK-LABEL: define internal i32 @test1a(
; CHECK: ret i32 undef

define i32 @test1b() {
	%X = call i32 @test1a( i32 17 )
	ret i32 %X

; CHECK-LABEL: define i32 @test1b(
; CHECK: ret i32 17
}



;;======================== test2

define internal i32 @test2a(i32 %A) {
	%C = icmp eq i32 %A, 0	
	br i1 %C, label %T, label %F
T:
	%B = call i32 @test2a( i32 0 )
	ret i32 0
F:
	%C.upgrd.1 = call i32 @test2a(i32 1)
	ret i32 %C.upgrd.1
}
; CHECK-LABEL: define internal i32 @test2a(
; CHECK-NEXT: br label %T
; CHECK: ret i32 undef


define i32 @test2b() {
	%X = call i32 @test2a(i32 0)
	ret i32 %X
}
; CHECK-LABEL: define i32 @test2b(
; CHECK-NEXT: %X = call i32 @test2a(i32 0)
; CHECK-NEXT: ret i32 0


;;======================== test3

@G = internal global i32 undef

define void @test3a() {
	%X = load i32, i32* @G
	store i32 %X, i32* @G
	ret void
}
; CHECK-LABEL: define void @test3a(
; CHECK-NEXT: ret void


define i32 @test3b() {
	%V = load i32, i32* @G
	%C = icmp eq i32 %V, 17
	br i1 %C, label %T, label %F
T:
	store i32 17, i32* @G
	ret i32 %V
F:	
	store i32 123, i32* @G
	ret i32 0
}
; CHECK-LABEL: define i32 @test3b(
; CHECK-NOT: store
; CHECK: ret i32 0


;;======================== test4

define internal {i64,i64} @test4a() {
  %a = insertvalue {i64,i64} undef, i64 4, 1
  %b = insertvalue {i64,i64} %a, i64 5, 0
  ret {i64,i64} %b
}

; CHECK-LABEL: define internal { i64, i64 } @test4a(
; CHECK-NEXT:   ret { i64, i64 } undef
; CHECK-NEXT: }

define i64 @test4b() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
  %a = invoke {i64,i64} @test4a()
          to label %A unwind label %B
A:
  %b = extractvalue {i64,i64} %a, 0
  %c = call i64 @test4c(i64 %b)
  ret i64 %c
B:
  %val = landingpad { i8*, i32 }
           catch i8* null
  ret i64 0
}
; CHECK: define i64 @test4b()
; CHECK:   %c = call i64 @test4c(i64 5)
; CHECK-NEXT:  ret i64 5


define internal i64 @test4c(i64 %a) {
  ret i64 %a
}
; CHECK-LABEL: define internal i64 @test4c(
; CHECK: ret i64 undef



;;======================== test5

; PR4313
define internal {i64,i64} @test5a() {
  %a = insertvalue {i64,i64} undef, i64 4, 1
  %b = insertvalue {i64,i64} %a, i64 5, 0
  ret {i64,i64} %b
}

define i64 @test5b() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
  %a = invoke {i64,i64} @test5a()
          to label %A unwind label %B
A:
  %c = call i64 @test5c({i64,i64} %a)
  ret i64 %c
B:
  %val = landingpad { i8*, i32 }
           catch i8* null
  ret i64 0
}

; CHECK: define i64 @test5b()
; CHECK:     A:
; CHECK-NEXT:  %c = call i64 @test5c({ i64, i64 } { i64 5, i64 4 })
; CHECK-NEXT:  ret i64 5

define internal i64 @test5c({i64,i64} %a) {
  %b = extractvalue {i64,i64} %a, 0
  ret i64 %b
}


;;======================== test6

define i64 @test6a() {
  ret i64 0
}

define i64 @test6b() {
  %a = call i64 @test6a()
  ret i64 %a
}
; CHECK-LABEL: define i64 @test6b(
; CHECK: ret i64 0

;;======================== test7


%T = type {i32,i32}

define internal %T @test7a(i32 %A) {
  %X = add i32 1, %A
  %mrv0 = insertvalue %T undef, i32 %X, 0
  %mrv1 = insertvalue %T %mrv0, i32 %A, 1
  ret %T %mrv1
; CHECK-LABEL: @test7a(
; CHECK-NEXT: ret %T undef
}

define i32 @test7b() {
	%X = call %T @test7a(i32 17)
        %Y = extractvalue %T %X, 0
	%Z = add i32 %Y, %Y
	ret i32 %Z
; CHECK-LABEL: define i32 @test7b(
; CHECK-NEXT: call %T @test7a(i32 17)
; CHECK-NEXT: ret i32 36
}

;;======================== test8


define internal {} @test8a(i32 %A, i32* %P) {
  store i32 %A, i32* %P
  ret {} {}
; CHECK-LABEL: @test8a(
; CHECK-NEXT: store i32 5, 
; CHECK-NEXT: ret 
}

define void @test8b(i32* %P) {
    %X = call {} @test8a(i32 5, i32* %P)
    ret void
; CHECK-LABEL: define void @test8b(
; CHECK-NEXT: call {} @test8a
; CHECK-NEXT: ret void
}

;;======================== test9

@test9g = internal global {  } zeroinitializer

define void @test9() {
entry:
        %local_foo = alloca {  }
        load {  }, {  }* @test9g
        store {  } %0, {  }* %local_foo
        ret void
}

; CHECK-LABEL: define void @test9(
; CHECK-NEXT: entry:
; CHECK-NEXT: %local_foo = alloca {}
; CHECK-NEXT:  store {} zeroinitializer, {}* %local_foo
; CHECK-NEXT: ret void

declare i32 @__gxx_personality_v0(...)

;;======================== test10

define i32 @test10a() nounwind {
entry:
  %call = call i32 @test10b(i32 undef)
  ret i32 %call
; CHECK-LABEL: define i32 @test10a(
; CHECK: ret i32 0
}

define internal i32 @test10b(i32 %x) nounwind {
entry:
  %r = and i32 %x, 1
  ret i32 %r
; CHECK-LABEL: define internal i32 @test10b(
; CHECK: ret i32 undef
}

;;======================== test11

define i64 @test11a() {
  %xor = xor i64 undef, undef
  ret i64 %xor
; CHECK-LABEL: define i64 @test11a
; CHECK: ret i64 0
}

define i64 @test11b() {
  %call1 = call i64 @test11a()
  %call2 = call i64 @llvm.ctpop.i64(i64 %call1)
  ret i64 %call2
; CHECK-LABEL: define i64 @test11b
; CHECK: %[[call1:.*]] = call i64 @test11a()
; CHECK-NOT: call i64 @llvm.ctpop.i64
; CHECK-NEXT: ret i64 0
}

declare i64 @llvm.ctpop.i64(i64)

;;======================== test12
;; Ensure that a struct as an arg to a potentially constant-foldable
;; function does not crash SCCP (for now it'll just ignores it)

define i1 @test12() {
  %c = call i1 @llvm.is.constant.sl_i32i32s({i32, i32} {i32 -1, i32 32})
  ret i1 %c
; CHECK-LABEL: define i1 @test12
; CHECK: ret i1 %c
}

declare i1 @llvm.is.constant.sl_i32i32s({i32, i32} %a)
