1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
// RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon \
// RUN: -target-feature +sha3 -S -emit-llvm -o - %s \
// RUN: | FileCheck %s
// REQUIRES: aarch64-registered-target || arm-registered-target
#include <arm_neon.h>
// CHECK-LABEL: @test_vsha512h(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.sha512h
//
void test_vsha512h(uint64x2_t hash_ed, uint64x2_t hash_gf, uint64x2_t kwh_kwh2) {
uint64x2_t result = vsha512hq_u64(hash_ed, hash_gf, kwh_kwh2);
}
// CHECK-LABEL: @test_vsha512h2(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.sha512h2
//
void test_vsha512h2(uint64x2_t sum_ab, uint64x2_t hash_c_, uint64x2_t hash_ab) {
uint64x2_t result = vsha512h2q_u64(sum_ab, hash_c_, hash_ab);
}
// CHECK-LABEL: @test_vsha512su0(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.sha512su0
//
void test_vsha512su0(uint64x2_t w0_1, uint64x2_t w2_) {
uint64x2_t result = vsha512su0q_u64(w0_1, w2_);
}
// CHECK-LABEL: @test_vsha512su1(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.sha512su1
//
void test_vsha512su1(uint64x2_t s01_s02, uint64x2_t w14_15, uint64x2_t w9_10) {
uint64x2_t result = vsha512su1q_u64(s01_s02, w14_15, w9_10);
}
// CHECK-LABEL: @test_vrax1(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.rax1
//
void test_vrax1(uint64x2_t a, uint64x2_t b) {
uint64x2_t result = vrax1q_u64(a, b);
}
// CHECK-LABEL: @test_xar(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.xar
//
void test_xar(uint64x2_t a, uint64x2_t b) {
uint64x2_t result = vxarq_u64(a, b, 10);
}
// CHECK-LABEL: @test_vbcax_u8(
// CHECK: call <16 x i8> @llvm.aarch64.crypto.bcaxu.v16i8
//
void test_vbcax_u8(uint8x16_t a, uint8x16_t b, uint8x16_t c) {
uint8x16_t result = vbcaxq_u8(a, b, c);
}
// CHECK-LABEL: @test_vbcax_u16(
// CHECK: call <8 x i16> @llvm.aarch64.crypto.bcaxu.v8i16
//
void test_vbcax_u16(uint16x8_t a, uint16x8_t b, uint16x8_t c) {
uint16x8_t result = vbcaxq_u16(a, b, c);
}
// CHECK-LABEL: @test_vbcax_u32(
// CHECK: call <4 x i32> @llvm.aarch64.crypto.bcaxu.v4i32
//
void test_vbcax_u32(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
uint32x4_t result = vbcaxq_u32(a, b, c);
}
// CHECK-LABEL: @test_vbcax_u64(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.bcaxu.v2i64
//
void test_vbcax_u64(uint64x2_t a, uint64x2_t b, uint64x2_t c) {
uint64x2_t result = vbcaxq_u64(a, b, c);
}
// CHECK-LABEL: @test_vbcax_s8(
// CHECK: call <16 x i8> @llvm.aarch64.crypto.bcaxs.v16i8
//
void test_vbcax_s8(int8x16_t a, int8x16_t b, int8x16_t c) {
int8x16_t result = vbcaxq_s8(a, b, c);
}
// CHECK-LABEL: @test_vbcax_s16(
// CHECK: call <8 x i16> @llvm.aarch64.crypto.bcaxs.v8i16
//
void test_vbcax_s16(int16x8_t a, int16x8_t b, int16x8_t c) {
int16x8_t result = vbcaxq_s16(a, b, c);
}
// CHECK-LABEL: @test_vbcax_s32(
// CHECK: call <4 x i32> @llvm.aarch64.crypto.bcaxs.v4i32
//
void test_vbcax_s32(int32x4_t a, int32x4_t b, int32x4_t c) {
int32x4_t result = vbcaxq_s32(a, b, c);
}
// CHECK-LABEL: @test_vbcax_s64(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.bcaxs.v2i64
//
void test_vbcax_s64(int64x2_t a, int64x2_t b, int64x2_t c) {
int64x2_t result = vbcaxq_s64(a, b, c);
}
// CHECK-LABEL: @test_veor3_u8(
// CHECK: call <16 x i8> @llvm.aarch64.crypto.eor3u.v16i8
//
void test_veor3_u8(uint8x16_t a, uint8x16_t b, uint8x16_t c) {
uint8x16_t result = veor3q_u8(a, b, c);
}
// CHECK-LABEL: @test_veor3_u16(
// CHECK: call <8 x i16> @llvm.aarch64.crypto.eor3u.v8i16
//
void test_veor3_u16(uint16x8_t a, uint16x8_t b, uint16x8_t c) {
uint16x8_t result = veor3q_u16(a, b, c);
}
// CHECK-LABEL: @test_veor3_u32(
// CHECK: call <4 x i32> @llvm.aarch64.crypto.eor3u.v4i32
//
void test_veor3_u32(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
uint32x4_t result = veor3q_u32(a, b, c);
}
// CHECK-LABEL: @test_veor3_u64(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.eor3u.v2i64
//
void test_veor3_u64(uint64x2_t a, uint64x2_t b, uint64x2_t c) {
uint64x2_t result = veor3q_u64(a, b, c);
}
// CHECK-LABEL: @test_veor3_s8(
// CHECK: call <16 x i8> @llvm.aarch64.crypto.eor3s.v16i8
//
void test_veor3_s8(int8x16_t a, int8x16_t b, int8x16_t c) {
int8x16_t result = veor3q_s8(a, b, c);
}
// CHECK-LABEL: @test_veor3_s16(
// CHECK: call <8 x i16> @llvm.aarch64.crypto.eor3s.v8i16
//
void test_veor3_s16(int16x8_t a, int16x8_t b, int16x8_t c) {
int16x8_t result = veor3q_s16(a, b, c);
}
// CHECK-LABEL: @test_veor3_s32(
// CHECK: call <4 x i32> @llvm.aarch64.crypto.eor3s.v4i32
//
void test_veor3_s32(int32x4_t a, int32x4_t b, int32x4_t c) {
int32x4_t result = veor3q_s32(a, b, c);
}
// CHECK-LABEL: @test_veor3_s64(
// CHECK: call <2 x i64> @llvm.aarch64.crypto.eor3s.v2i64
//
void test_veor3_s64(int64x2_t a, int64x2_t b, int64x2_t c) {
int64x2_t result = veor3q_s64(a, b, c);
}
|