// RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file -test-constant-fold | FileCheck %s

// -----

// CHECK-LABEL: @affine_for
// CHECK-SAME: [[ARG:%[a-zA-Z0-9]+]]
func @affine_for(%p : memref<f32>) {
  // CHECK: [[C:%.+]] = constant 6.{{0*}}e+00 : f32
  affine.for %arg1 = 0 to 128 {
    affine.for %arg2 = 0 to 8 { // CHECK: affine.for %{{.*}} = 0 to 8 {
      %0 = constant 4.5 : f32
      %1 = constant 1.5 : f32

      %2 = addf %0, %1 : f32

      // CHECK-NEXT: store [[C]], [[ARG]][]
      store %2, %p[] : memref<f32>
    }
  }
  return
}

// -----

// CHECK-LABEL: func @simple_addf
func @simple_addf() -> f32 {
  %0 = constant 4.5 : f32
  %1 = constant 1.5 : f32

  // CHECK-NEXT: [[C:%.+]] = constant 6.{{0*}}e+00 : f32
  %2 = addf %0, %1 : f32

  // CHECK-NEXT: return [[C]]
  return %2 : f32
}

// -----

// CHECK-LABEL: func @addf_splat_tensor
func @addf_splat_tensor() -> tensor<4xf32> {
  %0 = constant dense<4.5> : tensor<4xf32>
  %1 = constant dense<1.5> : tensor<4xf32>

  // CHECK-NEXT: [[C:%.+]] = constant dense<6.{{0*}}e+00> : tensor<4xf32>
  %2 = addf %0, %1 : tensor<4xf32>

  // CHECK-NEXT: return [[C]]
  return %2 : tensor<4xf32>
}

// -----

// CHECK-LABEL: func @addf_dense_tensor
func @addf_dense_tensor() -> tensor<4xf32> {
  %0 = constant dense<[1.5, 2.5, 3.5, 4.5]> : tensor<4xf32>
  %1 = constant dense<[1.5, 2.5, 3.5, 4.5]> : tensor<4xf32>

  // CHECK-NEXT: [[C:%.+]] = constant dense<[3.{{0*}}e+00, 5.{{0*}}e+00, 7.{{0*}}e+00, 9.{{0*}}e+00]> : tensor<4xf32>
  %2 = addf %0, %1 : tensor<4xf32>

  // CHECK-NEXT: return [[C]]
  return %2 : tensor<4xf32>
}

// -----

// CHECK-LABEL: func @addf_dense_and_splat_tensors
func @addf_dense_and_splat_tensors() -> tensor<4xf32> {
  %0 = constant dense<[1.5, 2.5, 3.5, 4.5]> : tensor<4xf32>
  %1 = constant dense<1.5> : tensor<4xf32>

  // CHECK-NEXT: [[C:%.+]] = constant dense<[3.{{0*}}e+00, 4.{{0*}}e+00, 5.{{0*}}e+00, 6.{{0*}}e+00]> : tensor<4xf32>
  %2 = addf %0, %1 : tensor<4xf32>

  // CHECK-NEXT: return [[C]]
  return %2 : tensor<4xf32>
}

// -----

// CHECK-LABEL: func @simple_addi
func @simple_addi() -> i32 {
  %0 = constant 1 : i32
  %1 = constant 5 : i32

  // CHECK-NEXT: [[C:%.+]] = constant 6 : i32
  %2 = addi %0, %1 : i32

  // CHECK-NEXT: return [[C]]
  return %2 : i32
}

// -----

// CHECK: func @simple_and
// CHECK-SAME: [[ARG0:%[a-zA-Z0-9]+]]: i1
// CHECK-SAME: [[ARG1:%[a-zA-Z0-9]+]]: i32)
func @simple_and(%arg0 : i1, %arg1 : i32) -> (i1, i32) {
  %c1 = constant 1 : i1
  %cAllOnes_32 = constant 4294967295 : i32

  // CHECK: [[C31:%.*]] = constant 31 : i32
  %c31 = constant 31 : i32
  %1 = and %arg0, %c1 : i1
  %2 = and %arg1, %cAllOnes_32 : i32

  // CHECK: [[VAL:%.*]] = and [[ARG1]], [[C31]]
  %3 = and %2, %c31 : i32

  // CHECK: return [[ARG0]], [[VAL]]
  return %1, %3 : i1, i32
}

// -----

// CHECK-LABEL: func @and_index
//  CHECK-SAME:   [[ARG:%[a-zA-Z0-9]+]]
func @and_index(%arg0 : index) -> (index) {
  // CHECK: [[C31:%.*]] = constant 31 : index
  %c31 = constant 31 : index
  %c_AllOnes = constant -1 : index
  %1 = and %arg0, %c31 : index

  // CHECK: and [[ARG]], [[C31]]
  %2 = and %1, %c_AllOnes : index
  return %2 : index
}

// -----

// CHECK: func @tensor_and
// CHECK-SAME: [[ARG0:%[a-zA-Z0-9]+]]: tensor<2xi32>
func @tensor_and(%arg0 : tensor<2xi32>) -> tensor<2xi32> {
  %cAllOnes_32 = constant dense<4294967295> : tensor<2xi32>

  // CHECK: [[C31:%.*]] = constant dense<31> : tensor<2xi32>
  %c31 = constant dense<31> : tensor<2xi32>

  // CHECK: [[CMIXED:%.*]] = constant dense<[31, -1]> : tensor<2xi32>
  %c_mixed = constant dense<[31, 4294967295]> : tensor<2xi32>

  %0 = and %arg0, %cAllOnes_32 : tensor<2xi32>

  // CHECK: [[T1:%.*]] = and [[ARG0]], [[C31]]
  %1 = and %0, %c31 : tensor<2xi32>

  // CHECK: [[T2:%.*]] = and [[T1]], [[CMIXED]]
  %2 = and %1, %c_mixed : tensor<2xi32>

  // CHECK: return [[T2]]
  return %2 : tensor<2xi32>
}

// -----

// CHECK: func @vector_and
// CHECK-SAME: [[ARG0:%[a-zA-Z0-9]+]]: vector<2xi32>
func @vector_and(%arg0 : vector<2xi32>) -> vector<2xi32> {
  %cAllOnes_32 = constant dense<4294967295> : vector<2xi32>

  // CHECK: [[C31:%.*]] = constant dense<31> : vector<2xi32>
  %c31 = constant dense<31> : vector<2xi32>

  // CHECK: [[CMIXED:%.*]] = constant dense<[31, -1]> : vector<2xi32>
  %c_mixed = constant dense<[31, 4294967295]> : vector<2xi32>

  %0 = and %arg0, %cAllOnes_32 : vector<2xi32>

  // CHECK: [[T1:%.*]] = and [[ARG0]], [[C31]]
  %1 = and %0, %c31 : vector<2xi32>

  // CHECK: [[T2:%.*]] = and [[T1]], [[CMIXED]]
  %2 = and %1, %c_mixed : vector<2xi32>

  // CHECK: return [[T2]]
  return %2 : vector<2xi32>
}

// -----

// CHECK-LABEL: func @addi_splat_vector
func @addi_splat_vector() -> vector<8xi32> {
  %0 = constant dense<1> : vector<8xi32>
  %1 = constant dense<5> : vector<8xi32>

  // CHECK-NEXT: [[C:%.+]] = constant dense<6> : vector<8xi32>
  %2 = addi %0, %1 : vector<8xi32>

  // CHECK-NEXT: return [[C]]
  return %2 : vector<8xi32>
}

// -----

// CHECK-LABEL: func @simple_subf
func @simple_subf() -> f32 {
  %0 = constant 4.5 : f32
  %1 = constant 1.5 : f32

  // CHECK-NEXT: [[C:%.+]] = constant 3.{{0*}}e+00 : f32
  %2 = subf %0, %1 : f32

  // CHECK-NEXT: return [[C]]
  return %2 : f32
}

// -----

// CHECK-LABEL: func @subf_splat_vector
func @subf_splat_vector() -> vector<4xf32> {
  %0 = constant dense<4.5> : vector<4xf32>
  %1 = constant dense<1.5> : vector<4xf32>

  // CHECK-NEXT: [[C:%.+]] = constant dense<3.{{0*}}e+00> : vector<4xf32>
  %2 = subf %0, %1 : vector<4xf32>

  // CHECK-NEXT: return [[C]]
  return %2 : vector<4xf32>
}

// -----

//      CHECK: func @simple_subi
// CHECK-SAME:   [[ARG0:%[a-zA-Z0-9]+]]
func @simple_subi(%arg0 : i32) -> (i32, i32) {
  %0 = constant 4 : i32
  %1 = constant 1 : i32
  %2 = constant 0 : i32

  // CHECK-NEXT:[[C3:%.+]] = constant 3 : i32
  %3 = subi %0, %1 : i32
  %4 = subi %arg0, %2 : i32

  // CHECK-NEXT: return [[C3]], [[ARG0]]
  return %3, %4 : i32, i32
}

// -----

// CHECK-LABEL: func @subi_splat_tensor
func @subi_splat_tensor() -> tensor<4xi32> {
  %0 = constant dense<4> : tensor<4xi32>
  %1 = constant dense<1> : tensor<4xi32>

  // CHECK-NEXT: [[C:%.+]] = constant dense<3> : tensor<4xi32>
  %2 = subi %0, %1 : tensor<4xi32>

  // CHECK-NEXT: return [[C]]
  return %2 : tensor<4xi32>
}

// -----

// CHECK-LABEL: func @affine_apply
func @affine_apply(%variable : index) -> (index, index, index) {
  %c177 = constant 177 : index
  %c211 = constant 211 : index
  %N = constant 1075 : index

  // CHECK:[[C1159:%.+]] = constant 1159 : index
  // CHECK:[[C1152:%.+]] = constant 1152 : index
  %x0 = affine.apply affine_map<(d0, d1)[S0] -> ( (d0 + 128 * S0) floordiv 128 + d1 mod 128)>
           (%c177, %c211)[%N]
  %x1 = affine.apply affine_map<(d0, d1)[S0] -> (128 * (S0 ceildiv 128))>
           (%c177, %c211)[%N]

  // CHECK:[[C42:%.+]] = constant 42 : index
  %y = affine.apply affine_map<(d0) -> (42)> (%variable)

  // CHECK: return [[C1159]], [[C1152]], [[C42]]
  return %x0, %x1, %y : index, index, index
}

// -----

// CHECK-LABEL: func @simple_mulf
func @simple_mulf() -> f32 {
  %0 = constant 4.5 : f32
  %1 = constant 1.5 : f32

  // CHECK-NEXT: [[C:%.+]] = constant 6.75{{0*}}e+00 : f32
  %2 = mulf %0, %1 : f32

  // CHECK-NEXT: return [[C]]
  return %2 : f32
}

// -----

// CHECK-LABEL: func @mulf_splat_tensor
func @mulf_splat_tensor() -> tensor<4xf32> {
  %0 = constant dense<4.5> : tensor<4xf32>
  %1 = constant dense<1.5> : tensor<4xf32>

  // CHECK-NEXT: [[C:%.+]] = constant dense<6.75{{0*}}e+00> : tensor<4xf32>
  %2 = mulf %0, %1 : tensor<4xf32>

  // CHECK-NEXT: return [[C]]
  return %2 : tensor<4xf32>
}

// -----

// CHECK-LABEL: func @simple_divi_signed
func @simple_divi_signed() -> (i32, i32, i32) {
  // CHECK-DAG: [[C0:%.+]] = constant 0
  %z = constant 0 : i32
  // CHECK-DAG: [[C6:%.+]] = constant 6
  %0 = constant 6 : i32
  %1 = constant 2 : i32

  // CHECK-NEXT: [[C3:%.+]] = constant 3 : i32
  %2 = divi_signed %0, %1 : i32

  %3 = constant -2 : i32

  // CHECK-NEXT: [[CM3:%.+]] = constant -3 : i32
  %4 = divi_signed %0, %3 : i32

  // CHECK-NEXT: [[XZ:%.+]] = divi_signed [[C6]], [[C0]]
  %5 = divi_signed %0, %z : i32

  // CHECK-NEXT: return [[C3]], [[CM3]], [[XZ]]
  return %2, %4, %5 : i32, i32, i32
}

// -----

// CHECK-LABEL: func @divi_signed_splat_tensor
func @divi_signed_splat_tensor() -> (tensor<4xi32>, tensor<4xi32>, tensor<4xi32>) {
  // CHECK-DAG: [[C0:%.+]] = constant dense<0>
  %z = constant dense<0> : tensor<4xi32>
  // CHECK-DAG: [[C6:%.+]] = constant dense<6>
  %0 = constant dense<6> : tensor<4xi32>
  %1 = constant dense<2> : tensor<4xi32>

  // CHECK-NEXT: [[C3:%.+]] = constant dense<3> : tensor<4xi32>
  %2 = divi_signed %0, %1 : tensor<4xi32>

  %3 = constant dense<-2> : tensor<4xi32>

  // CHECK-NEXT: [[CM3:%.+]] = constant dense<-3> : tensor<4xi32>
  %4 = divi_signed %0, %3 : tensor<4xi32>

  // CHECK-NEXT: [[XZ:%.+]] = divi_signed [[C6]], [[C0]]
  %5 = divi_signed %0, %z : tensor<4xi32>

  // CHECK-NEXT: return [[C3]], [[CM3]], [[XZ]]
  return %2, %4, %5 : tensor<4xi32>, tensor<4xi32>, tensor<4xi32>
}

// -----

// CHECK-LABEL: func @simple_divi_unsigned
func @simple_divi_unsigned() -> (i32, i32, i32) {
  %z = constant 0 : i32
  // CHECK-DAG: [[C6:%.+]] = constant 6
  %0 = constant 6 : i32
  %1 = constant 2 : i32

  // CHECK-DAG: [[C3:%.+]] = constant 3 : i32
  %2 = divi_unsigned %0, %1 : i32

  %3 = constant -2 : i32

  // Unsigned division interprets -2 as 2^32-2, so the result is 0.
  // CHECK-DAG: [[C0:%.+]] = constant 0 : i32
  %4 = divi_unsigned %0, %3 : i32

  // CHECK-NEXT: [[XZ:%.+]] = divi_unsigned [[C6]], [[C0]]
  %5 = divi_unsigned %0, %z : i32

  // CHECK-NEXT: return [[C3]], [[C0]], [[XZ]]
  return %2, %4, %5 : i32, i32, i32
}


// -----

// CHECK-LABEL: func @divi_unsigned_splat_tensor
func @divi_unsigned_splat_tensor() -> (tensor<4xi32>, tensor<4xi32>, tensor<4xi32>) {
  %z = constant dense<0> : tensor<4xi32>
  // CHECK-DAG: [[C6:%.+]] = constant dense<6>
  %0 = constant dense<6> : tensor<4xi32>
  %1 = constant dense<2> : tensor<4xi32>

  // CHECK-DAG: [[C3:%.+]] = constant dense<3> : tensor<4xi32>
  %2 = divi_unsigned %0, %1 : tensor<4xi32>

  %3 = constant dense<-2> : tensor<4xi32>

  // Unsigned division interprets -2 as 2^32-2, so the result is 0.
  // CHECK-DAG: [[C0:%.+]] = constant dense<0> : tensor<4xi32>
  %4 = divi_unsigned %0, %3 : tensor<4xi32>

  // CHECK-NEXT: [[XZ:%.+]] = divi_unsigned [[C6]], [[C0]]
  %5 = divi_unsigned %0, %z : tensor<4xi32>

  // CHECK-NEXT: return [[C3]], [[C0]], [[XZ]]
  return %2, %4, %5 : tensor<4xi32>, tensor<4xi32>, tensor<4xi32>
}

// -----

// CHECK-LABEL: func @simple_floordivi_signed
func @simple_floordivi_signed() -> (i32, i32, i32, i32, i32) {
  // CHECK-DAG: [[C0:%.+]] = constant 0
  %z = constant 0 : i32
  // CHECK-DAG: [[C6:%.+]] = constant 7
  %0 = constant 7 : i32
  %1 = constant 2 : i32

  // floor(7, 2) = 3
  // CHECK-NEXT: [[C3:%.+]] = constant 3 : i32
  %2 = floordivi_signed %0, %1 : i32

  %3 = constant -2 : i32

  // floor(7, -2) = -4
  // CHECK-NEXT: [[CM3:%.+]] = constant -4 : i32
  %4 = floordivi_signed %0, %3 : i32

  %5 = constant -9 : i32

  // floor(-9, 2) = -5
  // CHECK-NEXT: [[CM4:%.+]] = constant -5 : i32
  %6 = floordivi_signed %5, %1 : i32

  %7 = constant -13 : i32

  // floor(-13, -2) = 6
  // CHECK-NEXT: [[CM5:%.+]] = constant 6 : i32
  %8 = floordivi_signed %7, %3 : i32

  // CHECK-NEXT: [[XZ:%.+]] = floordivi_signed [[C6]], [[C0]]
  %9 = floordivi_signed %0, %z : i32

  return %2, %4, %6, %8, %9 : i32, i32, i32, i32, i32
}

// -----

// CHECK-LABEL: func @simple_ceildivi_signed
func @simple_ceildivi_signed() -> (i32, i32, i32, i32, i32) {
  // CHECK-DAG: [[C0:%.+]] = constant 0
  %z = constant 0 : i32
  // CHECK-DAG: [[C6:%.+]] = constant 7
  %0 = constant 7 : i32
  %1 = constant 2 : i32

  // ceil(7, 2) = 4
  // CHECK-NEXT: [[C3:%.+]] = constant 4 : i32
  %2 = ceildivi_signed %0, %1 : i32

  %3 = constant -2 : i32

  // ceil(7, -2) = -3
  // CHECK-NEXT: [[CM3:%.+]] = constant -3 : i32
  %4 = ceildivi_signed %0, %3 : i32

  %5 = constant -9 : i32

  // ceil(-9, 2) = -4
  // CHECK-NEXT: [[CM4:%.+]] = constant -4 : i32
  %6 = ceildivi_signed %5, %1 : i32

  %7 = constant -15 : i32

  // ceil(-15, -2) = 8
  // CHECK-NEXT: [[CM5:%.+]] = constant 8 : i32
  %8 = ceildivi_signed %7, %3 : i32

  // CHECK-NEXT: [[XZ:%.+]] = ceildivi_signed [[C6]], [[C0]]
  %9 = ceildivi_signed %0, %z : i32

  return %2, %4, %6, %8, %9 : i32, i32, i32, i32, i32
}

// -----

// CHECK-LABEL: func @simple_remi_signed
func @simple_remi_signed(%a : i32) -> (i32, i32, i32) {
  %0 = constant 5 : i32
  %1 = constant 2 : i32
  %2 = constant 1 : i32
  %3 = constant -2 : i32

  // CHECK-NEXT:[[C1:%.+]] = constant 1 : i32
  %4 = remi_signed %0, %1 : i32
  %5 = remi_signed %0, %3 : i32
  // CHECK-NEXT:[[C0:%.+]] = constant 0 : i32
  %6 = remi_signed %a, %2 : i32

  // CHECK-NEXT: return [[C1]], [[C1]], [[C0]] : i32, i32, i32
  return %4, %5, %6 : i32, i32, i32
}

// -----

// CHECK-LABEL: func @simple_remi_unsigned
func @simple_remi_unsigned(%a : i32) -> (i32, i32, i32) {
  %0 = constant 5 : i32
  %1 = constant 2 : i32
  %2 = constant 1 : i32
  %3 = constant -2 : i32

  // CHECK-DAG:[[C1:%.+]] = constant 1 : i32
  %4 = remi_unsigned %0, %1 : i32
  // CHECK-DAG:[[C5:%.+]] = constant 5 : i32
  %5 = remi_unsigned %0, %3 : i32
  // CHECK-DAG:[[C0:%.+]] = constant 0 : i32
  %6 = remi_unsigned %a, %2 : i32

  // CHECK-NEXT: return [[C1]], [[C5]], [[C0]] : i32, i32, i32
  return %4, %5, %6 : i32, i32, i32
}

// -----

// CHECK-LABEL: func @muli
func @muli() -> i32 {
  %0 = constant 4 : i32
  %1 = constant 2 : i32

  // CHECK-NEXT:[[C8:%.+]] = constant 8 : i32
  %2 = muli %0, %1 : i32

  // CHECK-NEXT: return [[C8]]
  return %2 : i32
}

// -----

// CHECK-LABEL: func @muli_splat_vector
func @muli_splat_vector() -> vector<4xi32> {
  %0 = constant dense<4> : vector<4xi32>
  %1 = constant dense<2> : vector<4xi32>

  // CHECK-NEXT: [[C:%.+]] = constant dense<8> : vector<4xi32>
  %2 = muli %0, %1 : vector<4xi32>

  // CHECK-NEXT: return [[C]]
  return %2 : vector<4xi32>
}

// CHECK-LABEL: func @dim
func @dim(%x : tensor<8x4xf32>) -> index {

  // CHECK:[[C4:%.+]] = constant 4 : index
  %c1 = constant 1 : index
  %0 = dim %x, %c1 : tensor<8x4xf32>

  // CHECK-NEXT: return [[C4]]
  return %0 : index
}

// -----

// CHECK-LABEL: func @cmpi
func @cmpi() -> (i1, i1, i1, i1, i1, i1, i1, i1, i1, i1) {
  %c42 = constant 42 : i32
  %cm1 = constant -1 : i32
  // CHECK-DAG: [[F:%.+]] = constant false
  // CHECK-DAG: [[T:%.+]] = constant true
  // CHECK-NEXT: return [[F]],
  %0 = cmpi eq, %c42, %cm1 : i32
  // CHECK-SAME: [[T]],
  %1 = cmpi ne, %c42, %cm1 : i32
  // CHECK-SAME: [[F]],
  %2 = cmpi slt, %c42, %cm1 : i32
  // CHECK-SAME: [[F]],
  %3 = cmpi sle, %c42, %cm1 : i32
  // CHECK-SAME: [[T]],
  %4 = cmpi sgt, %c42, %cm1 : i32
  // CHECK-SAME: [[T]],
  %5 = cmpi sge, %c42, %cm1 : i32
  // CHECK-SAME: [[T]],
  %6 = cmpi ult, %c42, %cm1 : i32
  // CHECK-SAME: [[T]],
  %7 = cmpi ule, %c42, %cm1 : i32
  // CHECK-SAME: [[F]],
  %8 = cmpi ugt, %c42, %cm1 : i32
  // CHECK-SAME: [[F]]
  %9 = cmpi uge, %c42, %cm1 : i32
  return %0, %1, %2, %3, %4, %5, %6, %7, %8, %9 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1
}

// -----

// CHECK-LABEL: func @cmpf_normal_numbers
func @cmpf_normal_numbers() -> (i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1) {
  %c42 = constant 42. : f32
  %cm1 = constant -1. : f32
  // CHECK-DAG: [[F:%.+]] = constant false
  // CHECK-DAG: [[T:%.+]] = constant true
  // CHECK-NEXT: return [[F]],
  %0 = cmpf false, %c42, %cm1 : f32
  // CHECK-SAME: [[F]],
  %1 = cmpf oeq, %c42, %cm1 : f32
  // CHECK-SAME: [[T]],
  %2 = cmpf ogt, %c42, %cm1 : f32
  // CHECK-SAME: [[T]],
  %3 = cmpf oge, %c42, %cm1 : f32
  // CHECK-SAME: [[F]],
  %4 = cmpf olt, %c42, %cm1 : f32
  // CHECK-SAME: [[F]],
  %5 = cmpf ole, %c42, %cm1 : f32
  // CHECK-SAME: [[T]],
  %6 = cmpf one, %c42, %cm1 : f32
  // CHECK-SAME: [[T]],
  %7 = cmpf ord, %c42, %cm1 : f32
  // CHECK-SAME: [[F]],
  %8 = cmpf ueq, %c42, %cm1 : f32
  // CHECK-SAME: [[T]],
  %9 = cmpf ugt, %c42, %cm1 : f32
  // CHECK-SAME: [[T]],
  %10 = cmpf uge, %c42, %cm1 : f32
  // CHECK-SAME: [[F]],
  %11 = cmpf ult, %c42, %cm1 : f32
  // CHECK-SAME: [[F]],
  %12 = cmpf ule, %c42, %cm1 : f32
  // CHECK-SAME: [[T]],
  %13 = cmpf une, %c42, %cm1 : f32
  // CHECK-SAME: [[F]],
  %14 = cmpf uno, %c42, %cm1 : f32
  // CHECK-SAME: [[T]]
  %15 = cmpf true, %c42, %cm1 : f32
  return %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1
}

// -----

// CHECK-LABEL: func @cmpf_nan
func @cmpf_nan() -> (i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1) {
  %c42 = constant 42. : f32
  %cqnan = constant 0xFFFFFFFF : f32
  // CHECK-DAG: [[F:%.+]] = constant false
  // CHECK-DAG: [[T:%.+]] = constant true
  // CHECK-NEXT: return [[F]],
  %0 = cmpf false, %c42, %cqnan : f32
  // CHECK-SAME: [[F]]
  %1 = cmpf oeq, %c42, %cqnan : f32
  // CHECK-SAME: [[F]],
  %2 = cmpf ogt, %c42, %cqnan : f32
  // CHECK-SAME: [[F]],
  %3 = cmpf oge, %c42, %cqnan : f32
  // CHECK-SAME: [[F]],
  %4 = cmpf olt, %c42, %cqnan : f32
  // CHECK-SAME: [[F]],
  %5 = cmpf ole, %c42, %cqnan : f32
  // CHECK-SAME: [[F]],
  %6 = cmpf one, %c42, %cqnan : f32
  // CHECK-SAME: [[F]],
  %7 = cmpf ord, %c42, %cqnan : f32
  // CHECK-SAME: [[T]],
  %8 = cmpf ueq, %c42, %cqnan : f32
  // CHECK-SAME: [[T]],
  %9 = cmpf ugt, %c42, %cqnan : f32
  // CHECK-SAME: [[T]],
  %10 = cmpf uge, %c42, %cqnan : f32
  // CHECK-SAME: [[T]],
  %11 = cmpf ult, %c42, %cqnan : f32
  // CHECK-SAME: [[T]],
  %12 = cmpf ule, %c42, %cqnan : f32
  // CHECK-SAME: [[T]],
  %13 = cmpf une, %c42, %cqnan : f32
  // CHECK-SAME: [[T]],
  %14 = cmpf uno, %c42, %cqnan : f32
  // CHECK-SAME: [[T]]
  %15 = cmpf true, %c42, %cqnan : f32
  return %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1
}

// -----

// CHECK-LABEL: func @cmpf_inf
func @cmpf_inf() -> (i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1) {
  %c42 = constant 42. : f32
  %cpinf = constant 0x7F800000 : f32
  // CHECK-DAG: [[F:%.+]] = constant false
  // CHECK-DAG: [[T:%.+]] = constant true
  // CHECK-NEXT: return [[F]],
  %0 = cmpf false, %c42, %cpinf: f32
  // CHECK-SAME: [[F]]
  %1 = cmpf oeq, %c42, %cpinf: f32
  // CHECK-SAME: [[F]],
  %2 = cmpf ogt, %c42, %cpinf: f32
  // CHECK-SAME: [[F]],
  %3 = cmpf oge, %c42, %cpinf: f32
  // CHECK-SAME: [[T]],
  %4 = cmpf olt, %c42, %cpinf: f32
  // CHECK-SAME: [[T]],
  %5 = cmpf ole, %c42, %cpinf: f32
  // CHECK-SAME: [[T]],
  %6 = cmpf one, %c42, %cpinf: f32
  // CHECK-SAME: [[T]],
  %7 = cmpf ord, %c42, %cpinf: f32
  // CHECK-SAME: [[F]],
  %8 = cmpf ueq, %c42, %cpinf: f32
  // CHECK-SAME: [[F]],
  %9 = cmpf ugt, %c42, %cpinf: f32
  // CHECK-SAME: [[F]],
  %10 = cmpf uge, %c42, %cpinf: f32
  // CHECK-SAME: [[T]],
  %11 = cmpf ult, %c42, %cpinf: f32
  // CHECK-SAME: [[T]],
  %12 = cmpf ule, %c42, %cpinf: f32
  // CHECK-SAME: [[T]],
  %13 = cmpf une, %c42, %cpinf: f32
  // CHECK-SAME: [[F]],
  %14 = cmpf uno, %c42, %cpinf: f32
  // CHECK-SAME: [[T]]
  %15 = cmpf true, %c42, %cpinf: f32
  return %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1
}

// -----

// CHECK-LABEL: func @fold_rank
func @fold_rank() -> (index) {
  %const_0 = constant dense<[[[1, -2, 1, 36]], [[0, 2, -1, 64]]]> : tensor<2x1x4xi32>

  // Fold a rank into a constant
  // CHECK-NEXT: [[C3:%.+]] = constant 3 : index
  %rank_0 = rank %const_0 : tensor<2x1x4xi32>

  // CHECK-NEXT: return [[C3]]
  return %rank_0 : index
}

// -----

// CHECK-LABEL: func @fold_rank_memref
func @fold_rank_memref(%arg0 : memref<?x?xf32>) -> (index) {
  // Fold a rank into a constant
  // CHECK-NEXT: [[C2:%.+]] = constant 2 : index
  %rank_0 = rank %arg0 : memref<?x?xf32>

  // CHECK-NEXT: return [[C2]]
  return %rank_0 : index
}

// -----

// CHECK-LABEL: func @nested_isolated_region
func @nested_isolated_region() {
  // CHECK-NEXT: func @isolated_op
  // CHECK-NEXT: constant 2
  func @isolated_op() {
    %0 = constant 1 : i32
    %2 = addi %0, %0 : i32
    "foo.yield"(%2) : (i32) -> ()
  }

  // CHECK: "foo.unknown_region"
  // CHECK-NEXT: constant 2
  "foo.unknown_region"() ({
    %0 = constant 1 : i32
    %2 = addi %0, %0 : i32
    "foo.yield"(%2) : (i32) -> ()
  }) : () -> ()
  return
}

// -----

// CHECK-LABEL: func @custom_insertion_position
func @custom_insertion_position() {
  // CHECK: test.one_region_op
  // CHECK-NEXT: constant 2
  "test.one_region_op"() ({

    %0 = constant 1 : i32
    %2 = addi %0, %0 : i32
    "foo.yield"(%2) : (i32) -> ()
  }) : () -> ()
  return
}

// CHECK-LABEL: func @splat_fold
func @splat_fold() -> (vector<4xf32>, tensor<4xf32>) {
  %c = constant 1.0 : f32
  %v = splat %c : vector<4xf32>
  %t = splat %c : tensor<4xf32>
  return %v, %t : vector<4xf32>, tensor<4xf32>

  // CHECK-NEXT: [[V:%.*]] = constant dense<1.000000e+00> : vector<4xf32>
  // CHECK-NEXT: [[T:%.*]] = constant dense<1.000000e+00> : tensor<4xf32>
  // CHECK-NEXT: return [[V]], [[T]] : vector<4xf32>, tensor<4xf32>
}

// -----

// CHECK-LABEL: func @subview_scalar_fold
func @subview_scalar_fold(%arg0: memref<f32>) -> memref<f32> {
  // CHECK-NOT: subview
  %c = subview %arg0[] [] [] : memref<f32> to memref<f32>
  return %c : memref<f32>
}
