// 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_svundef3_s8(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 48 x i8> undef
//
// CPP-CHECK-LABEL: @_Z16test_svundef3_s8v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 48 x i8> undef
//
svint8x3_t test_svundef3_s8()
{
  return svundef3_s8();
}

// CHECK-LABEL: @test_svundef3_s16(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 24 x i16> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef3_s16v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 24 x i16> undef
//
svint16x3_t test_svundef3_s16()
{
  return svundef3_s16();
}

// CHECK-LABEL: @test_svundef3_s32(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 12 x i32> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef3_s32v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 12 x i32> undef
//
svint32x3_t test_svundef3_s32()
{
  return svundef3_s32();
}

// CHECK-LABEL: @test_svundef3_s64(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 6 x i64> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef3_s64v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 6 x i64> undef
//
svint64x3_t test_svundef3_s64()
{
  return svundef3_s64();
}

// CHECK-LABEL: @test_svundef3_u8(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 48 x i8> undef
//
// CPP-CHECK-LABEL: @_Z16test_svundef3_u8v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 48 x i8> undef
//
svuint8x3_t test_svundef3_u8()
{
  return svundef3_u8();
}

// CHECK-LABEL: @test_svundef3_u16(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 24 x i16> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef3_u16v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 24 x i16> undef
//
svuint16x3_t test_svundef3_u16()
{
  return svundef3_u16();
}

// CHECK-LABEL: @test_svundef3_u32(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 12 x i32> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef3_u32v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 12 x i32> undef
//
svuint32x3_t test_svundef3_u32()
{
  return svundef3_u32();
}

// CHECK-LABEL: @test_svundef3_u64(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 6 x i64> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef3_u64v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 6 x i64> undef
//
svuint64x3_t test_svundef3_u64()
{
  return svundef3_u64();
}

// CHECK-LABEL: @test_svundef3_f16(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 24 x half> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef3_f16v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 24 x half> undef
//
svfloat16x3_t test_svundef3_f16()
{
  return svundef3_f16();
}

// CHECK-LABEL: @test_svundef3_f32(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 12 x float> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef3_f32v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 12 x float> undef
//
svfloat32x3_t test_svundef3_f32()
{
  return svundef3_f32();
}

// CHECK-LABEL: @test_svundef3_f64(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    ret <vscale x 6 x double> undef
//
// CPP-CHECK-LABEL: @_Z17test_svundef3_f64v(
// CPP-CHECK-NEXT:  entry:
// CPP-CHECK-NEXT:    ret <vscale x 6 x double> undef
//
svfloat64x3_t test_svundef3_f64()
{
  return svundef3_f64();
}
