; NOTE: Assertions have been autogenerated by utils/update_test_checks.py

; Test function specialization wouldn't crash due to constant expression.
; Note that this test case shows that function specialization pass would
; transform the function even if no specialization happened.

; RUN: opt -passes="ipsccp<func-spec>" -force-specialization -funcspec-for-literal-constant=false -S < %s | FileCheck %s

%struct = type { i8, i16, i32, i64, i64}
@Global = internal constant %struct {i8 0, i16 1, i32 2, i64 3, i64 4}

define internal i64 @func2(ptr %x) {
entry:
  %val = ptrtoint ptr %x to i64
  ret i64 %val
}

define internal i64 @func(ptr %x, ptr %binop) {
; CHECK-LABEL: @func(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    unreachable
;
entry:
  %tmp0 = call i64 %binop(ptr %x)
  ret i64 %tmp0
}

define internal i64 @zoo(i1 %flag) {
; CHECK-LABEL: @zoo(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br i1 [[FLAG:%.*]], label [[PLUS:%.*]], label [[MINUS:%.*]]
; CHECK:       plus:
; CHECK-NEXT:    [[TMP0:%.*]] = call i64 @func2.specialized.2(ptr getelementptr inbounds (i8, ptr @Global, i64 8))
; CHECK-NEXT:    br label [[MERGE:%.*]]
; CHECK:       minus:
; CHECK-NEXT:    [[TMP1:%.*]] = call i64 @func2.specialized.1(ptr getelementptr inbounds (i8, ptr @Global, i64 16))
; CHECK-NEXT:    br label [[MERGE]]
; CHECK:       merge:
; CHECK-NEXT:    [[TMP2:%.*]] = phi i64 [ ptrtoint (ptr getelementptr inbounds (i8, ptr @Global, i64 8) to i64), [[PLUS]] ], [ ptrtoint (ptr getelementptr inbounds (i8, ptr @Global, i64 16) to i64), [[MINUS]] ]
; CHECK-NEXT:    ret i64 [[TMP2]]
;
entry:
  br i1 %flag, label %plus, label %minus

plus:
  %arg = getelementptr %struct, ptr @Global, i32 0, i32 3
  %tmp0 = call i64 @func2(ptr %arg)
  br label %merge

minus:
  %arg2 = getelementptr %struct, ptr @Global, i32 0, i32 4
  %tmp1 = call i64 @func2(ptr %arg2)
  br label %merge

merge:
  %tmp2 = phi i64 [ %tmp0, %plus ], [ %tmp1, %minus]
  ret i64 %tmp2
}


define i64 @main() {
; CHECK-LABEL: @main(
; CHECK-NEXT:    [[TMP1:%.*]] = call i64 @zoo(i1 false)
; CHECK-NEXT:    [[TMP2:%.*]] = call i64 @zoo(i1 true)
; CHECK-NEXT:    [[TMP3:%.*]] = add i64 [[TMP1]], [[TMP2]]
; CHECK-NEXT:    ret i64 [[TMP3]]
;
  %1 = call i64 @zoo(i1 0)
  %2 = call i64 @zoo(i1 1)
  %3 = add i64 %1, %2
  ret i64 %3
}

