; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -ipsccp < %s | FileCheck %s

; Test that information about the true/false value of conditions themselves
; is also used, not information implied by comparisions.

define i32 @switch(i32 %x) {
; CHECK-LABEL: @switch(
; CHECK-NEXT:    switch i32 [[X:%.*]], label [[CASE_DEFAULT:%.*]] [
; CHECK-NEXT:    i32 0, label [[CASE_0:%.*]]
; CHECK-NEXT:    i32 2, label [[CASE_2:%.*]]
; CHECK-NEXT:    ]
; CHECK:       case.0:
; CHECK-NEXT:    br label [[END:%.*]]
; CHECK:       case.2:
; CHECK-NEXT:    br label [[END]]
; CHECK:       case.default:
; CHECK-NEXT:    br label [[END]]
; CHECK:       end:
; CHECK-NEXT:    ret i32 1
;
  switch i32 %x, label %case.default [
  i32 0, label %case.0
  i32 2, label %case.2
  ]

case.0:
  %add = add i32 %x, 1
  br label %end

case.2:
  %sub = sub i32 %x, 1
  br label %end

case.default:
  br label %end

end:
  %phi = phi i32 [ %add, %case.0 ], [ %sub, %case.2 ], [ 1, %case.default]
  ret i32 %phi
}

define i1 @assume(i32 %x) {
; CHECK-LABEL: @assume(
; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i32 [[X:%.*]], 0
; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT:    ret i1 true
;
  %cmp = icmp sge i32 %x, 0
  call void @llvm.assume(i1 %cmp)
  ret i1 %cmp
}

define i32 @branch(i32 %x) {
; CHECK-LABEL: @branch(
; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i32 [[X:%.*]], 0
; CHECK-NEXT:    br i1 [[CMP]], label [[IF_THEN1:%.*]], label [[IF_THEN2:%.*]]
; CHECK:       if.then1:
; CHECK-NEXT:    br label [[IF2_THEN1:%.*]]
; CHECK:       if2.then1:
; CHECK-NEXT:    br label [[IF2_END:%.*]]
; CHECK:       if2.end:
; CHECK-NEXT:    ret i32 0
; CHECK:       if.then2:
; CHECK-NEXT:    br label [[IF3_THEN2:%.*]]
; CHECK:       if3.then2:
; CHECK-NEXT:    br label [[IF3_END:%.*]]
; CHECK:       if3.end:
; CHECK-NEXT:    ret i32 1
;
  %cmp = icmp sge i32 %x, 0
  br i1 %cmp, label %if.then1, label %if.then2

if.then1:
  br i1 %cmp, label %if2.then1, label %if2.then2

if2.then1:
  br label %if2.end

if2.then2:
  br label %if2.end

if2.end:
  %phi = phi i32 [ 0, %if2.then1 ], [ 1, %if2.then2 ]
  ret i32 %phi

if.then2:
  br i1 %cmp, label %if3.then1, label %if3.then2

if3.then1:
  br label %if3.end

if3.then2:
  br label %if3.end

if3.end:
  %phi2 = phi i32 [ 0, %if3.then1 ], [ 1, %if3.then2 ]
  ret i32 %phi2
}

define void @pr46814(i32 %a) {
; CHECK-LABEL: @pr46814(
; CHECK-NEXT:    [[C1:%.*]] = icmp uge i32 [[A:%.*]], 10
; CHECK-NEXT:    [[C2:%.*]] = icmp ult i32 [[A]], 20
; CHECK-NEXT:    [[C3:%.*]] = and i1 [[C1]], [[C2]]
; CHECK-NEXT:    br i1 [[C3]], label [[IF_1:%.*]], label [[EXIT:%.*]]
; CHECK:       if.1:
; CHECK-NEXT:    br label [[IF_2:%.*]]
; CHECK:       if.2:
; CHECK-NEXT:    br i1 true, label [[EXIT]], label [[EXIT]]
; CHECK:       exit:
; CHECK-NEXT:    ret void
;
  %c1 = icmp uge i32 %a, 10
  %c2 = icmp ult i32 %a, 20
  %c3 = and i1 %c1, %c2
  br i1 %c3, label %if.1, label %exit

if.1:
  br i1 %c3, label %if.2, label %exit

if.2:
  br i1 %c3, label %exit, label %exit

exit:
  ret void
}

declare void @llvm.assume(i1)
