// RUN: %target-sil-opt -enable-sil-verify-all %s -sil-combine | FileCheck %s

// Test optimization of various builtins which receive the same value in their first and second operand.

sil_stage canonical

import Builtin
import Swift

// CHECK-LABEL: sil @tst_ssub 
// CHECK: %1 = integer_literal $Builtin.Int32, 0
// CHECK: %2 = struct $Int32 (%1 : $Builtin.Int32)
// CHECK: return %2
sil @tst_ssub : $@convention(thin) (Int32) -> Int32 {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = integer_literal $Builtin.Int1, -1
  %3 = builtin "ssub_with_overflow_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32, %2 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
  %4 = tuple_extract %3 : $(Builtin.Int32, Builtin.Int1), 0
  %5 = tuple_extract %3 : $(Builtin.Int32, Builtin.Int1), 1
  cond_fail %5 : $Builtin.Int1
  %7 = struct $Int32 (%4 : $Builtin.Int32)
  return %7 : $Int32
}

// CHECK-LABEL: sil @tst_usub 
// CHECK: %1 = integer_literal $Builtin.Int32, 0
// CHECK: %2 = struct $UInt32 (%1 : $Builtin.Int32)
// CHECK: return %2
sil @tst_usub : $@convention(thin) (UInt32) -> UInt32 {
bb0(%0 : $UInt32):
  %1 = struct_extract %0 : $UInt32, #UInt32._value
  %2 = integer_literal $Builtin.Int1, -1
  %3 = builtin "usub_with_overflow_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32, %2 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
  %4 = tuple_extract %3 : $(Builtin.Int32, Builtin.Int1), 0
  %5 = tuple_extract %3 : $(Builtin.Int32, Builtin.Int1), 1
  cond_fail %5 : $Builtin.Int1
  %7 = struct $UInt32 (%4 : $Builtin.Int32)
  return %7 : $UInt32
}

// CHECK-LABEL: sil @tst_sdiv 
// CHECK: %1 = integer_literal $Builtin.Int32, 1
// CHECK: %2 = struct $Int32 (%1 : $Builtin.Int32)
// CHECK: return %2
sil @tst_sdiv : $@convention(thin) (Int32) -> Int32 {
bb0(%0 : $Int32):
  %1 = integer_literal $Builtin.Int32, 0
  %2 = struct_extract %0 : $Int32, #Int32._value
  %3 = builtin "sdiv_Int32"(%2 : $Builtin.Int32, %2 : $Builtin.Int32) : $Builtin.Int32
  %4 = struct $Int32 (%3 : $Builtin.Int32)
  return %4 : $Int32
}

// CHECK-LABEL: sil @tst_udiv 
// CHECK: %1 = integer_literal $Builtin.Int32, 1
// CHECK: %2 = struct $UInt32 (%1 : $Builtin.Int32)
// CHECK: return %2
sil @tst_udiv : $@convention(thin) (UInt32) -> UInt32 {
bb0(%0 : $UInt32):
  %1 = integer_literal $Builtin.Int32, 0
  %2 = struct_extract %0 : $UInt32, #UInt32._value
  %3 = builtin "udiv_Int32"(%2 : $Builtin.Int32, %2 : $Builtin.Int32) : $Builtin.Int32
  %4 = struct $UInt32 (%3 : $Builtin.Int32)
  return %4 : $UInt32
}

// CHECK-LABEL: sil @tst_srem 
// CHECK: %1 = integer_literal $Builtin.Int32, 0
// CHECK: %2 = struct $Int32 (%1 : $Builtin.Int32)
// CHECK: return %2
sil @tst_srem : $@convention(thin) (Int32) -> Int32 {
bb0(%0 : $Int32):
  %1 = integer_literal $Builtin.Int32, 0
  %2 = struct_extract %0 : $Int32, #Int32._value
  %3 = builtin "srem_Int32"(%2 : $Builtin.Int32, %2 : $Builtin.Int32) : $Builtin.Int32
  %4 = struct $Int32 (%3 : $Builtin.Int32)
  return %4 : $Int32
}

// CHECK-LABEL: sil @tst_urem 
// CHECK: %1 = integer_literal $Builtin.Int32, 0
// CHECK: %2 = struct $UInt32 (%1 : $Builtin.Int32)
// CHECK: return %2
sil @tst_urem : $@convention(thin) (UInt32) -> UInt32 {
bb0(%0 : $UInt32):
  %1 = integer_literal $Builtin.Int32, 0
  %2 = struct_extract %0 : $UInt32, #UInt32._value
  %3 = builtin "urem_Int32"(%2 : $Builtin.Int32, %2 : $Builtin.Int32) : $Builtin.Int32
  %4 = struct $UInt32 (%3 : $Builtin.Int32)
  return %4 : $UInt32
}

// CHECK-LABEL: sil @tst_and 
// CHECK: return %0
sil @tst_and : $@convention(thin) (Int32) -> Int32 {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = builtin "and_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int32
  %3 = struct $Int32 (%2 : $Builtin.Int32)
  return %3 : $Int32
}

// CHECK-LABEL: sil @tst_or 
// CHECK: return %0
sil @tst_or : $@convention(thin) (Int32) -> Int32 {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = builtin "or_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int32
  %3 = struct $Int32 (%2 : $Builtin.Int32)
  return %3 : $Int32
}

// CHECK-LABEL: sil @tst_xor 
// CHECK: %1 = integer_literal $Builtin.Int32, 0
// CHECK: %2 = struct $Int32 (%1 : $Builtin.Int32)
// CHECK: return %2
sil @tst_xor : $@convention(thin) (Int32) -> Int32 {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = builtin "xor_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int32
  %3 = struct $Int32 (%2 : $Builtin.Int32)
  return %3 : $Int32
}

// CHECK-LABEL: sil @tst_icmp_eq 
// CHECK: %1 = integer_literal $Builtin.Int1, -1
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_eq : $@convention(thin) (Int32) -> Bool {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = builtin "cmp_eq_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_icmp_ne 
// CHECK: %1 = integer_literal $Builtin.Int1, 0
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_ne : $@convention(thin) (Int32) -> Bool {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = builtin "cmp_ne_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_icmp_sle 
// CHECK: %1 = integer_literal $Builtin.Int1, -1
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_sle : $@convention(thin) (Int32) -> Bool {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = builtin "cmp_sle_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_icmp_sge 
// CHECK: %1 = integer_literal $Builtin.Int1, -1
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_sge : $@convention(thin) (Int32) -> Bool {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = builtin "cmp_sge_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_icmp_slt 
// CHECK: %1 = integer_literal $Builtin.Int1, 0
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_slt : $@convention(thin) (Int32) -> Bool {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = builtin "cmp_slt_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_icmp_sgt 
// CHECK: %1 = integer_literal $Builtin.Int1, 0
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_sgt : $@convention(thin) (Int32) -> Bool {
bb0(%0 : $Int32):
  %1 = struct_extract %0 : $Int32, #Int32._value
  %2 = builtin "cmp_sgt_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_icmp_ule 
// CHECK: %1 = integer_literal $Builtin.Int1, -1
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_ule : $@convention(thin) (UInt32) -> Bool {
bb0(%0 : $UInt32):
  %1 = struct_extract %0 : $UInt32, #UInt32._value
  %2 = builtin "cmp_ule_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_icmp_uge 
// CHECK: %1 = integer_literal $Builtin.Int1, -1
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_uge : $@convention(thin) (UInt32) -> Bool {
bb0(%0 : $UInt32):
  %1 = struct_extract %0 : $UInt32, #UInt32._value
  %2 = builtin "cmp_uge_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_icmp_ult 
// CHECK: %1 = integer_literal $Builtin.Int1, 0
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_ult : $@convention(thin) (UInt32) -> Bool {
bb0(%0 : $UInt32):
  %1 = struct_extract %0 : $UInt32, #UInt32._value
  %2 = builtin "cmp_ult_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_icmp_ugt 
// CHECK: %1 = integer_literal $Builtin.Int1, 0
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_icmp_ugt : $@convention(thin) (UInt32) -> Bool {
bb0(%0 : $UInt32):
  %1 = struct_extract %0 : $UInt32, #UInt32._value
  %2 = builtin "cmp_ugt_Int32"(%1 : $Builtin.Int32, %1 : $Builtin.Int32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_fcmp_ueq 
// CHECK: %1 = integer_literal $Builtin.Int1, -1
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_fcmp_ueq : $@convention(thin) (Float) -> Bool {
bb0(%0 : $Float):
  %1 = struct_extract %0 : $Float, #Float._value
  %2 = builtin "fcmp_ueq_FPIEEE32"(%1 : $Builtin.FPIEEE32, %1 : $Builtin.FPIEEE32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_fcmp_one 
// CHECK: %1 = integer_literal $Builtin.Int1, 0
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_fcmp_one : $@convention(thin) (Float) -> Bool {
bb0(%0 : $Float):
  %1 = struct_extract %0 : $Float, #Float._value
  %2 = builtin "fcmp_one_FPIEEE32"(%1 : $Builtin.FPIEEE32, %1 : $Builtin.FPIEEE32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_fcmp_ule 
// CHECK: %1 = integer_literal $Builtin.Int1, -1
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_fcmp_ule : $@convention(thin) (Float) -> Bool {
bb0(%0 : $Float):
  %1 = struct_extract %0 : $Float, #Float._value
  %2 = builtin "fcmp_ule_FPIEEE32"(%1 : $Builtin.FPIEEE32, %1 : $Builtin.FPIEEE32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

// CHECK-LABEL: sil @tst_fcmp_uge 
// CHECK: %1 = integer_literal $Builtin.Int1, -1
// CHECK: %2 = struct $Bool (%1 : $Builtin.Int1)
// CHECK: return %2
sil @tst_fcmp_uge : $@convention(thin) (Float) -> Bool {
bb0(%0 : $Float):
  %1 = struct_extract %0 : $Float, #Float._value
  %2 = builtin "fcmp_uge_FPIEEE32"(%1 : $Builtin.FPIEEE32, %1 : $Builtin.FPIEEE32) : $Builtin.Int1
  %3 = struct $Bool (%2 : $Builtin.Int1)
  return %3 : $Bool
}

