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

define i1 @test1(i1 %a) {
; CHECK-LABEL: @test1(
; CHECK-NEXT:    ret i1 true
;
  %b = xor i1 %a, true
  %res = sub i1 %a, %b
  ret i1 %res
}

define <2 x i1> @test2(<2 x i1> %a) {
; CHECK-LABEL: @test2(
; CHECK-NEXT:    ret <2 x i1> splat (i1 true)
;
  %b = xor <2 x i1> %a, <i1 true, i1 true>
  %res = sub <2 x i1> %a, %b
  ret <2 x i1> %res
}

define i1 @test5(i1 %a) {
; CHECK-LABEL: @test5(
; CHECK-NEXT:    ret i1 false
;
  %res = add i1 %a, %a
  ret i1 %res
}

define <2 x i1> @test6(<2 x i1> %a) {
; CHECK-LABEL: @test6(
; CHECK-NEXT:    ret <2 x i1> zeroinitializer
;
  %res = add <2 x i1> %a, %a
  ret <2 x i1> %res
}

define i1 @test7(i1 %a) {
; CHECK-LABEL: @test7(
; CHECK-NEXT:    ret i1 [[A:%.*]]
;
  %c = xor i1 %a, true
  %res = add i1 %c, true
  ret i1 %res
}

; TODO: simplify this to %a
define i1 @test8(i1 %a) {
; CHECK-LABEL: @test8(
; CHECK-NEXT:    [[C:%.*]] = add i1 [[A:%.*]], true
; CHECK-NEXT:    [[RES:%.*]] = xor i1 [[C]], true
; CHECK-NEXT:    ret i1 [[RES]]
;
  %c = add i1 %a, true
  %res = xor i1 %c, true
  ret i1 %res
}

define i1 @test9(i1 %a) {
; CHECK-LABEL: @test9(
; CHECK-NEXT:    ret i1 [[A:%.*]]
;
  %c = xor i1 %a, true
  %res = sub i1 %c, true
  ret i1 %res
}

; TODO: simplify this to %a
define i1 @test10(i1 %a) {
; CHECK-LABEL: @test10(
; CHECK-NEXT:    [[C:%.*]] = sub i1 [[A:%.*]], true
; CHECK-NEXT:    [[RES:%.*]] = xor i1 [[C]], true
; CHECK-NEXT:    ret i1 [[RES]]
;
  %c = sub i1 %a, true
  %res = xor i1 %c, true
  ret i1 %res
}
