// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O2 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O2 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK

// REQUIRES: aarch64-registered-target || arm-registered-target

#include <arm_sve.h>

// CHECK-LABEL: @test_svundef2_s8(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 32 x i8> undef
//
// CPP-CHECK-LABEL: @_Z16test_svundef2_s8v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 32 x i8> undef
//
svint8x2_t test_svundef2_s8()
{
  return svundef2_s8();
}

// CHECK-LABEL: @test_svundef2_s16(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 16 x i16> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef2_s16v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 16 x i16> undef
//
svint16x2_t test_svundef2_s16()
{
  return svundef2_s16();
}

// CHECK-LABEL: @test_svundef2_s32(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 8 x i32> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef2_s32v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 8 x i32> undef
//
svint32x2_t test_svundef2_s32()
{
  return svundef2_s32();
}

// CHECK-LABEL: @test_svundef2_s64(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 4 x i64> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef2_s64v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 4 x i64> undef
//
svint64x2_t test_svundef2_s64()
{
  return svundef2_s64();
}

// CHECK-LABEL: @test_svundef2_u8(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 32 x i8> undef
//
// CPP-CHECK-LABEL: @_Z16test_svundef2_u8v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 32 x i8> undef
//
svuint8x2_t test_svundef2_u8()
{
  return svundef2_u8();
}

// CHECK-LABEL: @test_svundef2_u16(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 16 x i16> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef2_u16v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 16 x i16> undef
//
svuint16x2_t test_svundef2_u16()
{
  return svundef2_u16();
}

// CHECK-LABEL: @test_svundef2_u32(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 8 x i32> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef2_u32v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 8 x i32> undef
//
svuint32x2_t test_svundef2_u32()
{
  return svundef2_u32();
}

// CHECK-LABEL: @test_svundef2_u64(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 4 x i64> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef2_u64v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 4 x i64> undef
//
svuint64x2_t test_svundef2_u64()
{
  return svundef2_u64();
}

// CHECK-LABEL: @test_svundef2_f16(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 16 x half> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef2_f16v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 16 x half> undef
//
svfloat16x2_t test_svundef2_f16()
{
  return svundef2_f16();
}

// CHECK-LABEL: @test_svundef2_f32(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 8 x float> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef2_f32v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 8 x float> undef
//
svfloat32x2_t test_svundef2_f32()
{
  return svundef2_f32();
}

// CHECK-LABEL: @test_svundef2_f64(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 4 x double> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef2_f64v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 4 x double> undef
//
svfloat64x2_t test_svundef2_f64()
{
  return svundef2_f64();
}
