293 lines
20 KiB
C
293 lines
20 KiB
C
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +kl -target-feature +widekl -emit-llvm -o - -Wall -Werror | FileCheck %s
|
|
// RUN: %clang_cc1 %s -ffreestanding -triple=i386-unknown-unknown -target-feature +kl -target-feature +widekl -emit-llvm -o - -Wall -Werror | FileCheck %s
|
|
// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +widekl -emit-llvm -o - -Wall -Werror | FileCheck %s
|
|
// RUN: %clang_cc1 %s -ffreestanding -triple=i386-unknown-unknown -target-feature +widekl -emit-llvm -o - -Wall -Werror | FileCheck %s
|
|
|
|
#include <x86intrin.h>
|
|
|
|
void test_loadiwkey(unsigned int ctl, __m128i intkey, __m128i enkey_lo, __m128i enkey_hi) {
|
|
//CHECK-LABEL: @test_loadiwkey
|
|
//CHECK: @llvm.x86.loadiwkey
|
|
_mm_loadiwkey(ctl, intkey, enkey_lo, enkey_hi);
|
|
}
|
|
|
|
unsigned int test_encodekey128_u32(unsigned int htype, __m128i key, void *h) {
|
|
//CHECK-LABEL: @test_encodekey128_u32
|
|
//CHECK: call { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.encodekey128(i32 %{{.*}}, <2 x i64> %{{.*}})
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: itcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 2
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 16
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 3
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 32
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 4
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 48
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 5
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 64
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 6
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 80
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 0
|
|
return _mm_encodekey128_u32(htype, key, h);
|
|
}
|
|
|
|
unsigned int test_encodekey256_u32(unsigned int htype, __m128i key_lo, __m128i key_hi, void *h) {
|
|
//CHECK-LABEL: @test_encodekey256_u32
|
|
//CHECK: call { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.encodekey256(i32 %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: itcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 2
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 16
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 3
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 32
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 4
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 48
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 5
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 64
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 6
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 80
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 7
|
|
//CHECK: getelementptr i8, i8* %{{.*}}, i32 96
|
|
//CHECK: bitcast i8* %{{.*}} to <2 x i64>*
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
|
|
//CHECK: extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 0
|
|
return _mm_encodekey256_u32(htype, key_lo, key_hi, h);
|
|
}
|
|
|
|
unsigned char test_mm_aesenc256kl_u8(__m128i *odata, __m128i idata, const void *h) {
|
|
//CHECK-LABEL: @test_mm_aesenc256kl_u8
|
|
//CHECK: call { i8, <2 x i64> } @llvm.x86.aesenc256kl(<2 x i64> %{{.*}}, i8* %{{.*}})
|
|
//CHECK: extractvalue { i8, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64> } %{{.*}}, 0
|
|
return _mm_aesenc256kl_u8(odata, idata, h);
|
|
}
|
|
|
|
unsigned char test_mm_aesdec256kl_u8(__m128i *odata, __m128i idata, const void *h) {
|
|
//CHECK-LABEL: @test_mm_aesdec256kl_u8
|
|
//CHECK: call { i8, <2 x i64> } @llvm.x86.aesdec256kl(<2 x i64> %{{.*}}, i8* %{{.*}})
|
|
//CHECK: extractvalue { i8, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64> } %{{.*}}, 0
|
|
return _mm_aesdec256kl_u8(odata, idata, h);
|
|
}
|
|
|
|
unsigned char test_mm_aesenc128kl_u8(__m128i *odata, __m128i idata, const void *h) {
|
|
//CHECK-LABEL: @test_mm_aesenc128kl_u8
|
|
//CHECK: call { i8, <2 x i64> } @llvm.x86.aesenc128kl(<2 x i64> %{{.*}}, i8* %{{.*}})
|
|
//CHECK: extractvalue { i8, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64> } %{{.*}}, 0
|
|
return _mm_aesenc128kl_u8(odata, idata, h);
|
|
}
|
|
|
|
unsigned char test_mm_aesdec128kl_u8(__m128i *odata, __m128i idata, const void *h) {
|
|
//CHECK-LABEL: @test_mm_aesdec128kl_u8
|
|
//CHECK: call { i8, <2 x i64> } @llvm.x86.aesdec128kl(<2 x i64> %{{.*}}, i8* %{{.*}})
|
|
//CHECK: extractvalue { i8, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64> } %{{.*}}, 0
|
|
return _mm_aesdec128kl_u8(odata, idata, h);
|
|
}
|
|
|
|
unsigned char test__mm_aesencwide128kl_u8(__m128i odata[8], const __m128i idata[8], const void* h) {
|
|
//CHECK-LABEL: @test__mm_aesencwide128kl
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 1
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 2
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 3
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 4
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 5
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 6
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 7
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: call { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesencwide128kl(i8* %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 2
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 3
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 2
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 4
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 3
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 5
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 4
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 6
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 5
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 7
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 6
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 8
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 7
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 0
|
|
return _mm_aesencwide128kl_u8(odata, idata, h);
|
|
}
|
|
|
|
unsigned char test__mm_aesdecwide128kl_u8(__m128i odata[8], const __m128i idata[8], const void* h) {
|
|
//CHECK-LABEL: @test__mm_aesdecwide128kl
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 1
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 2
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 3
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 4
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 5
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 6
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 7
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: call { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesdecwide128kl(i8* %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 2
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 3
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 2
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 4
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 3
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 5
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 4
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 6
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 5
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 7
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 6
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 8
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 7
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 0
|
|
return _mm_aesdecwide128kl_u8(odata, idata, h);
|
|
}
|
|
|
|
unsigned char test__mm_aesencwide256kl_u8(__m128i odata[8], const __m128i idata[8], const void* h) {
|
|
//CHECK-LABEL: @test__mm_aesencwide256kl
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 1
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 2
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 3
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 4
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 5
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 6
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 7
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: call { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesencwide256kl(i8* %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 2
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 3
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 2
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 4
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 3
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 5
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 4
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 6
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 5
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 7
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 6
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 8
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 7
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 0
|
|
return _mm_aesencwide256kl_u8(odata, idata, h);
|
|
}
|
|
|
|
unsigned char test__mm_aesdecwide256kl_u8(__m128i odata[8], const __m128i idata[8], const void* h) {
|
|
//CHECK-LABEL: @test__mm_aesdecwide256kl
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 1
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 2
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 3
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 4
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 5
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 6
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 7
|
|
//CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: call { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesdecwide256kl(i8* %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 2
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 1
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 3
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 2
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 4
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 3
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 5
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 4
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 6
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 5
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 7
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 6
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 8
|
|
//CHECK: getelementptr <2 x i64>, <2 x i64>* %{{.*}}, i32 7
|
|
//CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
|
|
//CHECK: extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %{{.*}}, 0
|
|
return _mm_aesdecwide256kl_u8(odata, idata, h);
|
|
}
|