Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[SveEmitter] Add builtins for SVE2 Optional extensions (AES, SHA3, SM…
…4, BITPERM) This patch adds various builtins under their corresponding feature macros: Defined under __ARM_FEATURE_SVE2_AES: - svaesd - svaese - svaesimc - svaesmc - svpmullb_pair - svpmullt_pair Defined under __ARM_FEATURE_SVE2_SHA3: - svrax1 Defined under __ARM_FEATURE_SVE2_SM4: - svsm4e - svsm4ekey Defined under __ARM_FEATURE_SVE2_BITPERM: - svbdep - svbext - svbgrp
- Loading branch information
1 parent
f22cdc3
commit e46043b
Showing
13 changed files
with
564 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesd.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_AES -triple aarch64-none-linux-gnu -target-feature +sve2-aes -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_AES -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve2-aes -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify -verify-ignore-unexpected=error %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify=overload -verify-ignore-unexpected=error %s | ||
|
||
#include <arm_sve.h> | ||
|
||
#ifdef SVE_OVERLOADED_FORMS | ||
// A simple used,unused... macro, long enough to represent any SVE builtin. | ||
#define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3 | ||
#else | ||
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 | ||
#endif | ||
|
||
svuint8_t test_svaesd_u8(svuint8_t op1, svuint8_t op2) | ||
{ | ||
// CHECK-LABEL: test_svaesd_u8 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.aesd(<vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2) | ||
// CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svaesd'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svaesd_u8'}} | ||
return SVE_ACLE_FUNC(svaesd,_u8,,)(op1, op2); | ||
} |
23 changes: 23 additions & 0 deletions
23
clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aese.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_AES -triple aarch64-none-linux-gnu -target-feature +sve2-aes -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_AES -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve2-aes -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify -verify-ignore-unexpected=error %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify=overload -verify-ignore-unexpected=error %s | ||
|
||
#include <arm_sve.h> | ||
|
||
#ifdef SVE_OVERLOADED_FORMS | ||
// A simple used,unused... macro, long enough to represent any SVE builtin. | ||
#define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3 | ||
#else | ||
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 | ||
#endif | ||
|
||
svuint8_t test_svaese_u8(svuint8_t op1, svuint8_t op2) | ||
{ | ||
// CHECK-LABEL: test_svaese_u8 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.aese(<vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2) | ||
// CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svaese'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svaese_u8'}} | ||
return SVE_ACLE_FUNC(svaese,_u8,,)(op1, op2); | ||
} |
23 changes: 23 additions & 0 deletions
23
clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesimc.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_AES -triple aarch64-none-linux-gnu -target-feature +sve2-aes -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_AES -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve2-aes -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify -verify-ignore-unexpected=error %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify=overload -verify-ignore-unexpected=error %s | ||
|
||
#include <arm_sve.h> | ||
|
||
#ifdef SVE_OVERLOADED_FORMS | ||
// A simple used,unused... macro, long enough to represent any SVE builtin. | ||
#define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3 | ||
#else | ||
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 | ||
#endif | ||
|
||
svuint8_t test_svaesimc_u8(svuint8_t op) | ||
{ | ||
// CHECK-LABEL: test_svaesimc_u8 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.aesimc(<vscale x 16 x i8> %op) | ||
// CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svaesimc'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svaesimc_u8'}} | ||
return SVE_ACLE_FUNC(svaesimc,_u8,,)(op); | ||
} |
23 changes: 23 additions & 0 deletions
23
clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesmc.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_AES -triple aarch64-none-linux-gnu -target-feature +sve2-aes -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_AES -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve2-aes -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify -verify-ignore-unexpected=error %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify=overload -verify-ignore-unexpected=error %s | ||
|
||
#include <arm_sve.h> | ||
|
||
#ifdef SVE_OVERLOADED_FORMS | ||
// A simple used,unused... macro, long enough to represent any SVE builtin. | ||
#define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3 | ||
#else | ||
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 | ||
#endif | ||
|
||
svuint8_t test_svaesmc_u8(svuint8_t op) | ||
{ | ||
// CHECK-LABEL: test_svaesmc_u8 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.aesmc(<vscale x 16 x i8> %op) | ||
// CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svaesmc'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svaesmc_u8'}} | ||
return SVE_ACLE_FUNC(svaesmc,_u8,,)(op); | ||
} |
97 changes: 97 additions & 0 deletions
97
clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bdep.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_BITPERM -triple aarch64-none-linux-gnu -target-feature +sve2-bitperm -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_BITPERM -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve2-bitperm -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify -verify-ignore-unexpected=error %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify=overload -verify-ignore-unexpected=error %s | ||
|
||
#include <arm_sve.h> | ||
|
||
#ifdef SVE_OVERLOADED_FORMS | ||
// A simple used,unused... macro, long enough to represent any SVE builtin. | ||
#define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3 | ||
#else | ||
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 | ||
#endif | ||
|
||
svuint8_t test_svbdep_u8(svuint8_t op1, svuint8_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbdep_u8 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.bdep.x.nxv16i8(<vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2) | ||
// CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbdep'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbdep_u8'}} | ||
return SVE_ACLE_FUNC(svbdep,_u8,,)(op1, op2); | ||
} | ||
|
||
svuint16_t test_svbdep_u16(svuint16_t op1, svuint16_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbdep_u16 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.bdep.x.nxv8i16(<vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2) | ||
// CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbdep'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbdep_u16'}} | ||
return SVE_ACLE_FUNC(svbdep,_u16,,)(op1, op2); | ||
} | ||
|
||
svuint32_t test_svbdep_u32(svuint32_t op1, svuint32_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbdep_u32 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.bdep.x.nxv4i32(<vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2) | ||
// CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbdep'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbdep_u32'}} | ||
return SVE_ACLE_FUNC(svbdep,_u32,,)(op1, op2); | ||
} | ||
|
||
svuint64_t test_svbdep_u64(svuint64_t op1, svuint64_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbdep_u64 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.bdep.x.nxv2i64(<vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2) | ||
// CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbdep'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbdep_u64'}} | ||
return SVE_ACLE_FUNC(svbdep,_u64,,)(op1, op2); | ||
} | ||
|
||
svuint8_t test_svbdep_n_u8(svuint8_t op1, uint8_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbdep_n_u8 | ||
// CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2) | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.bdep.x.nxv16i8(<vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]]) | ||
// CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbdep'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbdep_n_u8'}} | ||
return SVE_ACLE_FUNC(svbdep,_n_u8,,)(op1, op2); | ||
} | ||
|
||
svuint16_t test_svbdep_n_u16(svuint16_t op1, uint16_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbdep_n_u16 | ||
// CHECK: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2) | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.bdep.x.nxv8i16(<vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]]) | ||
// CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbdep'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbdep_n_u16'}} | ||
return SVE_ACLE_FUNC(svbdep,_n_u16,,)(op1, op2); | ||
} | ||
|
||
svuint32_t test_svbdep_n_u32(svuint32_t op1, uint32_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbdep_n_u32 | ||
// CHECK: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2) | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.bdep.x.nxv4i32(<vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]]) | ||
// CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbdep'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbdep_n_u32'}} | ||
return SVE_ACLE_FUNC(svbdep,_n_u32,,)(op1, op2); | ||
} | ||
|
||
svuint64_t test_svbdep_n_u64(svuint64_t op1, uint64_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbdep_n_u64 | ||
// CHECK: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2) | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.bdep.x.nxv2i64(<vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]]) | ||
// CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbdep'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbdep_n_u64'}} | ||
return SVE_ACLE_FUNC(svbdep,_n_u64,,)(op1, op2); | ||
} |
97 changes: 97 additions & 0 deletions
97
clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bext.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_BITPERM -triple aarch64-none-linux-gnu -target-feature +sve2-bitperm -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_SVE2_BITPERM -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve2-bitperm -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify -verify-ignore-unexpected=error %s | ||
// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify=overload -verify-ignore-unexpected=error %s | ||
|
||
#include <arm_sve.h> | ||
|
||
#ifdef SVE_OVERLOADED_FORMS | ||
// A simple used,unused... macro, long enough to represent any SVE builtin. | ||
#define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3 | ||
#else | ||
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 | ||
#endif | ||
|
||
svuint8_t test_svbext_u8(svuint8_t op1, svuint8_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbext_u8 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.bext.x.nxv16i8(<vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2) | ||
// CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbext'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbext_u8'}} | ||
return SVE_ACLE_FUNC(svbext,_u8,,)(op1, op2); | ||
} | ||
|
||
svuint16_t test_svbext_u16(svuint16_t op1, svuint16_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbext_u16 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.bext.x.nxv8i16(<vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2) | ||
// CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbext'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbext_u16'}} | ||
return SVE_ACLE_FUNC(svbext,_u16,,)(op1, op2); | ||
} | ||
|
||
svuint32_t test_svbext_u32(svuint32_t op1, svuint32_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbext_u32 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.bext.x.nxv4i32(<vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2) | ||
// CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbext'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbext_u32'}} | ||
return SVE_ACLE_FUNC(svbext,_u32,,)(op1, op2); | ||
} | ||
|
||
svuint64_t test_svbext_u64(svuint64_t op1, svuint64_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbext_u64 | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.bext.x.nxv2i64(<vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2) | ||
// CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbext'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbext_u64'}} | ||
return SVE_ACLE_FUNC(svbext,_u64,,)(op1, op2); | ||
} | ||
|
||
svuint8_t test_svbext_n_u8(svuint8_t op1, uint8_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbext_n_u8 | ||
// CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2) | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.bext.x.nxv16i8(<vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]]) | ||
// CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbext'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbext_n_u8'}} | ||
return SVE_ACLE_FUNC(svbext,_n_u8,,)(op1, op2); | ||
} | ||
|
||
svuint16_t test_svbext_n_u16(svuint16_t op1, uint16_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbext_n_u16 | ||
// CHECK: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2) | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.bext.x.nxv8i16(<vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]]) | ||
// CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbext'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbext_n_u16'}} | ||
return SVE_ACLE_FUNC(svbext,_n_u16,,)(op1, op2); | ||
} | ||
|
||
svuint32_t test_svbext_n_u32(svuint32_t op1, uint32_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbext_n_u32 | ||
// CHECK: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2) | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.bext.x.nxv4i32(<vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]]) | ||
// CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbext'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbext_n_u32'}} | ||
return SVE_ACLE_FUNC(svbext,_n_u32,,)(op1, op2); | ||
} | ||
|
||
svuint64_t test_svbext_n_u64(svuint64_t op1, uint64_t op2) | ||
{ | ||
// CHECK-LABEL: test_svbext_n_u64 | ||
// CHECK: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2) | ||
// CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.bext.x.nxv2i64(<vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]]) | ||
// CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]] | ||
// overload-warning@+2 {{implicit declaration of function 'svbext'}} | ||
// expected-warning@+1 {{implicit declaration of function 'svbext_n_u64'}} | ||
return SVE_ACLE_FUNC(svbext,_n_u64,,)(op1, op2); | ||
} |
Oops, something went wrong.