133b00b49SSimon Pilgrim; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*a12d7e4bSSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SSE 3*a12d7e4bSSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SSE 4*a12d7e4bSSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX1 5*a12d7e4bSSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX2 6*a12d7e4bSSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -mattr=+prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX256 7*a12d7e4bSSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -mattr=-prefer-256-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX512 877465967SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=znver4 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX512VBMI2 9*a12d7e4bSSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=knl -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX512 1033b00b49SSimon Pilgrim 1133b00b49SSimon Pilgrim@a64 = common global [8 x i64] zeroinitializer, align 64 1233b00b49SSimon Pilgrim@b64 = common global [8 x i64] zeroinitializer, align 64 1333b00b49SSimon Pilgrim@c64 = common global [8 x i64] zeroinitializer, align 64 1433b00b49SSimon Pilgrim@d64 = common global [8 x i64] zeroinitializer, align 64 1533b00b49SSimon Pilgrim@a32 = common global [16 x i32] zeroinitializer, align 64 1633b00b49SSimon Pilgrim@b32 = common global [16 x i32] zeroinitializer, align 64 1733b00b49SSimon Pilgrim@c32 = common global [16 x i32] zeroinitializer, align 64 1833b00b49SSimon Pilgrim@d32 = common global [16 x i32] zeroinitializer, align 64 1933b00b49SSimon Pilgrim@a16 = common global [32 x i16] zeroinitializer, align 64 2033b00b49SSimon Pilgrim@b16 = common global [32 x i16] zeroinitializer, align 64 2133b00b49SSimon Pilgrim@c16 = common global [32 x i16] zeroinitializer, align 64 2233b00b49SSimon Pilgrim@d16 = common global [32 x i16] zeroinitializer, align 64 2333b00b49SSimon Pilgrim@a8 = common global [64 x i8] zeroinitializer, align 64 2433b00b49SSimon Pilgrim@b8 = common global [64 x i8] zeroinitializer, align 64 2533b00b49SSimon Pilgrim@c8 = common global [64 x i8] zeroinitializer, align 64 2633b00b49SSimon Pilgrim@d8 = common global [64 x i8] zeroinitializer, align 64 2733b00b49SSimon Pilgrim 2833b00b49SSimon Pilgrimdeclare i64 @llvm.fshr.i64(i64, i64, i64) 2933b00b49SSimon Pilgrimdeclare i32 @llvm.fshr.i32(i32, i32, i32) 3033b00b49SSimon Pilgrimdeclare i16 @llvm.fshr.i16(i16, i16, i16) 3133b00b49SSimon Pilgrimdeclare i8 @llvm.fshr.i8 (i8 , i8 , i8 ) 3233b00b49SSimon Pilgrim 3333b00b49SSimon Pilgrimdefine void @fshr_v8i64() { 3433b00b49SSimon Pilgrim; SSE-LABEL: @fshr_v8i64( 3533b00b49SSimon Pilgrim; SSE-NEXT: [[A0:%.*]] = load i64, ptr @a64, align 8 3633b00b49SSimon Pilgrim; SSE-NEXT: [[A1:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 1), align 8 3733b00b49SSimon Pilgrim; SSE-NEXT: [[A2:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 2), align 8 3833b00b49SSimon Pilgrim; SSE-NEXT: [[A3:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 3), align 8 3933b00b49SSimon Pilgrim; SSE-NEXT: [[A4:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 4), align 8 4033b00b49SSimon Pilgrim; SSE-NEXT: [[A5:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 5), align 8 4133b00b49SSimon Pilgrim; SSE-NEXT: [[A6:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 6), align 8 4233b00b49SSimon Pilgrim; SSE-NEXT: [[A7:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 7), align 8 4333b00b49SSimon Pilgrim; SSE-NEXT: [[B0:%.*]] = load i64, ptr @b64, align 8 4433b00b49SSimon Pilgrim; SSE-NEXT: [[B1:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 1), align 8 4533b00b49SSimon Pilgrim; SSE-NEXT: [[B2:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 2), align 8 4633b00b49SSimon Pilgrim; SSE-NEXT: [[B3:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 3), align 8 4733b00b49SSimon Pilgrim; SSE-NEXT: [[B4:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 4), align 8 4833b00b49SSimon Pilgrim; SSE-NEXT: [[B5:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 5), align 8 4933b00b49SSimon Pilgrim; SSE-NEXT: [[B6:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 6), align 8 5033b00b49SSimon Pilgrim; SSE-NEXT: [[B7:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 7), align 8 5133b00b49SSimon Pilgrim; SSE-NEXT: [[R0:%.*]] = call i64 @llvm.fshr.i64(i64 [[A0]], i64 [[A0]], i64 [[B0]]) 5233b00b49SSimon Pilgrim; SSE-NEXT: [[R1:%.*]] = call i64 @llvm.fshr.i64(i64 [[A1]], i64 [[A1]], i64 [[B1]]) 5333b00b49SSimon Pilgrim; SSE-NEXT: [[R2:%.*]] = call i64 @llvm.fshr.i64(i64 [[A2]], i64 [[A2]], i64 [[B2]]) 5433b00b49SSimon Pilgrim; SSE-NEXT: [[R3:%.*]] = call i64 @llvm.fshr.i64(i64 [[A3]], i64 [[A3]], i64 [[B3]]) 5533b00b49SSimon Pilgrim; SSE-NEXT: [[R4:%.*]] = call i64 @llvm.fshr.i64(i64 [[A4]], i64 [[A4]], i64 [[B4]]) 5633b00b49SSimon Pilgrim; SSE-NEXT: [[R5:%.*]] = call i64 @llvm.fshr.i64(i64 [[A5]], i64 [[A5]], i64 [[B5]]) 5733b00b49SSimon Pilgrim; SSE-NEXT: [[R6:%.*]] = call i64 @llvm.fshr.i64(i64 [[A6]], i64 [[A6]], i64 [[B6]]) 5833b00b49SSimon Pilgrim; SSE-NEXT: [[R7:%.*]] = call i64 @llvm.fshr.i64(i64 [[A7]], i64 [[A7]], i64 [[B7]]) 5933b00b49SSimon Pilgrim; SSE-NEXT: store i64 [[R0]], ptr @d64, align 8 6033b00b49SSimon Pilgrim; SSE-NEXT: store i64 [[R1]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 1), align 8 6133b00b49SSimon Pilgrim; SSE-NEXT: store i64 [[R2]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 2), align 8 6233b00b49SSimon Pilgrim; SSE-NEXT: store i64 [[R3]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 3), align 8 6333b00b49SSimon Pilgrim; SSE-NEXT: store i64 [[R4]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 4), align 8 6433b00b49SSimon Pilgrim; SSE-NEXT: store i64 [[R5]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 5), align 8 6533b00b49SSimon Pilgrim; SSE-NEXT: store i64 [[R6]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 6), align 8 6633b00b49SSimon Pilgrim; SSE-NEXT: store i64 [[R7]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 7), align 8 6733b00b49SSimon Pilgrim; SSE-NEXT: ret void 6833b00b49SSimon Pilgrim; 6933b00b49SSimon Pilgrim; AVX1-LABEL: @fshr_v8i64( 7033b00b49SSimon Pilgrim; AVX1-NEXT: [[A0:%.*]] = load i64, ptr @a64, align 8 7133b00b49SSimon Pilgrim; AVX1-NEXT: [[A1:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 1), align 8 7233b00b49SSimon Pilgrim; AVX1-NEXT: [[A2:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 2), align 8 7333b00b49SSimon Pilgrim; AVX1-NEXT: [[A3:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 3), align 8 7433b00b49SSimon Pilgrim; AVX1-NEXT: [[A4:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 4), align 8 7533b00b49SSimon Pilgrim; AVX1-NEXT: [[A5:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 5), align 8 7633b00b49SSimon Pilgrim; AVX1-NEXT: [[A6:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 6), align 8 7733b00b49SSimon Pilgrim; AVX1-NEXT: [[A7:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 7), align 8 7833b00b49SSimon Pilgrim; AVX1-NEXT: [[B0:%.*]] = load i64, ptr @b64, align 8 7933b00b49SSimon Pilgrim; AVX1-NEXT: [[B1:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 1), align 8 8033b00b49SSimon Pilgrim; AVX1-NEXT: [[B2:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 2), align 8 8133b00b49SSimon Pilgrim; AVX1-NEXT: [[B3:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 3), align 8 8233b00b49SSimon Pilgrim; AVX1-NEXT: [[B4:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 4), align 8 8333b00b49SSimon Pilgrim; AVX1-NEXT: [[B5:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 5), align 8 8433b00b49SSimon Pilgrim; AVX1-NEXT: [[B6:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 6), align 8 8533b00b49SSimon Pilgrim; AVX1-NEXT: [[B7:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 7), align 8 8633b00b49SSimon Pilgrim; AVX1-NEXT: [[R0:%.*]] = call i64 @llvm.fshr.i64(i64 [[A0]], i64 [[A0]], i64 [[B0]]) 8733b00b49SSimon Pilgrim; AVX1-NEXT: [[R1:%.*]] = call i64 @llvm.fshr.i64(i64 [[A1]], i64 [[A1]], i64 [[B1]]) 8833b00b49SSimon Pilgrim; AVX1-NEXT: [[R2:%.*]] = call i64 @llvm.fshr.i64(i64 [[A2]], i64 [[A2]], i64 [[B2]]) 8933b00b49SSimon Pilgrim; AVX1-NEXT: [[R3:%.*]] = call i64 @llvm.fshr.i64(i64 [[A3]], i64 [[A3]], i64 [[B3]]) 9033b00b49SSimon Pilgrim; AVX1-NEXT: [[R4:%.*]] = call i64 @llvm.fshr.i64(i64 [[A4]], i64 [[A4]], i64 [[B4]]) 9133b00b49SSimon Pilgrim; AVX1-NEXT: [[R5:%.*]] = call i64 @llvm.fshr.i64(i64 [[A5]], i64 [[A5]], i64 [[B5]]) 9233b00b49SSimon Pilgrim; AVX1-NEXT: [[R6:%.*]] = call i64 @llvm.fshr.i64(i64 [[A6]], i64 [[A6]], i64 [[B6]]) 9333b00b49SSimon Pilgrim; AVX1-NEXT: [[R7:%.*]] = call i64 @llvm.fshr.i64(i64 [[A7]], i64 [[A7]], i64 [[B7]]) 9433b00b49SSimon Pilgrim; AVX1-NEXT: store i64 [[R0]], ptr @d64, align 8 9533b00b49SSimon Pilgrim; AVX1-NEXT: store i64 [[R1]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 1), align 8 9633b00b49SSimon Pilgrim; AVX1-NEXT: store i64 [[R2]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 2), align 8 9733b00b49SSimon Pilgrim; AVX1-NEXT: store i64 [[R3]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 3), align 8 9833b00b49SSimon Pilgrim; AVX1-NEXT: store i64 [[R4]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 4), align 8 9933b00b49SSimon Pilgrim; AVX1-NEXT: store i64 [[R5]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 5), align 8 10033b00b49SSimon Pilgrim; AVX1-NEXT: store i64 [[R6]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 6), align 8 10133b00b49SSimon Pilgrim; AVX1-NEXT: store i64 [[R7]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 7), align 8 10233b00b49SSimon Pilgrim; AVX1-NEXT: ret void 10333b00b49SSimon Pilgrim; 10433b00b49SSimon Pilgrim; AVX2-LABEL: @fshr_v8i64( 10533b00b49SSimon Pilgrim; AVX2-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @a64, align 8 10633b00b49SSimon Pilgrim; AVX2-NEXT: [[TMP2:%.*]] = load <4 x i64>, ptr @b64, align 8 10733b00b49SSimon Pilgrim; AVX2-NEXT: [[TMP3:%.*]] = call <4 x i64> @llvm.fshr.v4i64(<4 x i64> [[TMP1]], <4 x i64> [[TMP1]], <4 x i64> [[TMP2]]) 10833b00b49SSimon Pilgrim; AVX2-NEXT: store <4 x i64> [[TMP3]], ptr @d64, align 8 10933b00b49SSimon Pilgrim; AVX2-NEXT: [[TMP4:%.*]] = load <4 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 4), align 8 11033b00b49SSimon Pilgrim; AVX2-NEXT: [[TMP5:%.*]] = load <4 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 4), align 8 11133b00b49SSimon Pilgrim; AVX2-NEXT: [[TMP6:%.*]] = call <4 x i64> @llvm.fshr.v4i64(<4 x i64> [[TMP4]], <4 x i64> [[TMP4]], <4 x i64> [[TMP5]]) 11233b00b49SSimon Pilgrim; AVX2-NEXT: store <4 x i64> [[TMP6]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 4), align 8 11333b00b49SSimon Pilgrim; AVX2-NEXT: ret void 11433b00b49SSimon Pilgrim; 11533b00b49SSimon Pilgrim; AVX256-LABEL: @fshr_v8i64( 11633b00b49SSimon Pilgrim; AVX256-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @a64, align 8 11733b00b49SSimon Pilgrim; AVX256-NEXT: [[TMP2:%.*]] = load <4 x i64>, ptr @b64, align 8 11833b00b49SSimon Pilgrim; AVX256-NEXT: [[TMP3:%.*]] = call <4 x i64> @llvm.fshr.v4i64(<4 x i64> [[TMP1]], <4 x i64> [[TMP1]], <4 x i64> [[TMP2]]) 11933b00b49SSimon Pilgrim; AVX256-NEXT: store <4 x i64> [[TMP3]], ptr @d64, align 8 12033b00b49SSimon Pilgrim; AVX256-NEXT: [[TMP4:%.*]] = load <4 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 4), align 8 12133b00b49SSimon Pilgrim; AVX256-NEXT: [[TMP5:%.*]] = load <4 x i64>, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 4), align 8 12233b00b49SSimon Pilgrim; AVX256-NEXT: [[TMP6:%.*]] = call <4 x i64> @llvm.fshr.v4i64(<4 x i64> [[TMP4]], <4 x i64> [[TMP4]], <4 x i64> [[TMP5]]) 12333b00b49SSimon Pilgrim; AVX256-NEXT: store <4 x i64> [[TMP6]], ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 4), align 8 12433b00b49SSimon Pilgrim; AVX256-NEXT: ret void 12533b00b49SSimon Pilgrim; 12633b00b49SSimon Pilgrim; AVX512-LABEL: @fshr_v8i64( 12733b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP1:%.*]] = load <8 x i64>, ptr @a64, align 8 12833b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP2:%.*]] = load <8 x i64>, ptr @b64, align 8 12933b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP3:%.*]] = call <8 x i64> @llvm.fshr.v8i64(<8 x i64> [[TMP1]], <8 x i64> [[TMP1]], <8 x i64> [[TMP2]]) 13033b00b49SSimon Pilgrim; AVX512-NEXT: store <8 x i64> [[TMP3]], ptr @d64, align 8 13133b00b49SSimon Pilgrim; AVX512-NEXT: ret void 13233b00b49SSimon Pilgrim; 13377465967SSimon Pilgrim; AVX512VBMI2-LABEL: @fshr_v8i64( 13477465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP1:%.*]] = load <8 x i64>, ptr @a64, align 8 13577465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP2:%.*]] = load <8 x i64>, ptr @b64, align 8 13677465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP3:%.*]] = call <8 x i64> @llvm.fshr.v8i64(<8 x i64> [[TMP1]], <8 x i64> [[TMP1]], <8 x i64> [[TMP2]]) 13777465967SSimon Pilgrim; AVX512VBMI2-NEXT: store <8 x i64> [[TMP3]], ptr @d64, align 8 13877465967SSimon Pilgrim; AVX512VBMI2-NEXT: ret void 13977465967SSimon Pilgrim; 14033b00b49SSimon Pilgrim %a0 = load i64, ptr @a64, align 8 14133b00b49SSimon Pilgrim %a1 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 1), align 8 14233b00b49SSimon Pilgrim %a2 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 2), align 8 14333b00b49SSimon Pilgrim %a3 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 3), align 8 14433b00b49SSimon Pilgrim %a4 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 4), align 8 14533b00b49SSimon Pilgrim %a5 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 5), align 8 14633b00b49SSimon Pilgrim %a6 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 6), align 8 14733b00b49SSimon Pilgrim %a7 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 7), align 8 14833b00b49SSimon Pilgrim %b0 = load i64, ptr @b64, align 8 14933b00b49SSimon Pilgrim %b1 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 1), align 8 15033b00b49SSimon Pilgrim %b2 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 2), align 8 15133b00b49SSimon Pilgrim %b3 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 3), align 8 15233b00b49SSimon Pilgrim %b4 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 4), align 8 15333b00b49SSimon Pilgrim %b5 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 5), align 8 15433b00b49SSimon Pilgrim %b6 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 6), align 8 15533b00b49SSimon Pilgrim %b7 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 7), align 8 15633b00b49SSimon Pilgrim %r0 = call i64 @llvm.fshr.i64(i64 %a0, i64 %a0, i64 %b0) 15733b00b49SSimon Pilgrim %r1 = call i64 @llvm.fshr.i64(i64 %a1, i64 %a1, i64 %b1) 15833b00b49SSimon Pilgrim %r2 = call i64 @llvm.fshr.i64(i64 %a2, i64 %a2, i64 %b2) 15933b00b49SSimon Pilgrim %r3 = call i64 @llvm.fshr.i64(i64 %a3, i64 %a3, i64 %b3) 16033b00b49SSimon Pilgrim %r4 = call i64 @llvm.fshr.i64(i64 %a4, i64 %a4, i64 %b4) 16133b00b49SSimon Pilgrim %r5 = call i64 @llvm.fshr.i64(i64 %a5, i64 %a5, i64 %b5) 16233b00b49SSimon Pilgrim %r6 = call i64 @llvm.fshr.i64(i64 %a6, i64 %a6, i64 %b6) 16333b00b49SSimon Pilgrim %r7 = call i64 @llvm.fshr.i64(i64 %a7, i64 %a7, i64 %b7) 1642d69827cSNikita Popov store i64 %r0, ptr @d64, align 8 16533b00b49SSimon Pilgrim store i64 %r1, ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 1), align 8 16633b00b49SSimon Pilgrim store i64 %r2, ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 2), align 8 16733b00b49SSimon Pilgrim store i64 %r3, ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 3), align 8 16833b00b49SSimon Pilgrim store i64 %r4, ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 4), align 8 16933b00b49SSimon Pilgrim store i64 %r5, ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 5), align 8 17033b00b49SSimon Pilgrim store i64 %r6, ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 6), align 8 17133b00b49SSimon Pilgrim store i64 %r7, ptr getelementptr inbounds ([8 x i64], ptr @d64, i32 0, i64 7), align 8 17233b00b49SSimon Pilgrim ret void 17333b00b49SSimon Pilgrim} 17433b00b49SSimon Pilgrim 17533b00b49SSimon Pilgrimdefine void @fshr_v16i32() { 17633b00b49SSimon Pilgrim; SSE-LABEL: @fshr_v16i32( 17733b00b49SSimon Pilgrim; SSE-NEXT: [[A0:%.*]] = load i32, ptr @a32, align 4 17833b00b49SSimon Pilgrim; SSE-NEXT: [[A1:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1), align 4 17933b00b49SSimon Pilgrim; SSE-NEXT: [[A2:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 2), align 4 18033b00b49SSimon Pilgrim; SSE-NEXT: [[A3:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 3), align 4 18133b00b49SSimon Pilgrim; SSE-NEXT: [[A4:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 4 18233b00b49SSimon Pilgrim; SSE-NEXT: [[A5:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 5), align 4 18333b00b49SSimon Pilgrim; SSE-NEXT: [[A6:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 6), align 4 18433b00b49SSimon Pilgrim; SSE-NEXT: [[A7:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 7), align 4 18533b00b49SSimon Pilgrim; SSE-NEXT: [[A8:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4 18633b00b49SSimon Pilgrim; SSE-NEXT: [[A9:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 9), align 4 18733b00b49SSimon Pilgrim; SSE-NEXT: [[A10:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 10), align 4 18833b00b49SSimon Pilgrim; SSE-NEXT: [[A11:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 11), align 4 18933b00b49SSimon Pilgrim; SSE-NEXT: [[A12:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4 19033b00b49SSimon Pilgrim; SSE-NEXT: [[A13:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 13), align 4 19133b00b49SSimon Pilgrim; SSE-NEXT: [[A14:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 14), align 4 19233b00b49SSimon Pilgrim; SSE-NEXT: [[A15:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 15), align 4 19333b00b49SSimon Pilgrim; SSE-NEXT: [[B0:%.*]] = load i32, ptr @b32, align 4 19433b00b49SSimon Pilgrim; SSE-NEXT: [[B1:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 1), align 4 19533b00b49SSimon Pilgrim; SSE-NEXT: [[B2:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 2), align 4 19633b00b49SSimon Pilgrim; SSE-NEXT: [[B3:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 3), align 4 19733b00b49SSimon Pilgrim; SSE-NEXT: [[B4:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 4), align 4 19833b00b49SSimon Pilgrim; SSE-NEXT: [[B5:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 5), align 4 19933b00b49SSimon Pilgrim; SSE-NEXT: [[B6:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 6), align 4 20033b00b49SSimon Pilgrim; SSE-NEXT: [[B7:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 7), align 4 20133b00b49SSimon Pilgrim; SSE-NEXT: [[B8:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 8), align 4 20233b00b49SSimon Pilgrim; SSE-NEXT: [[B9:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 9), align 4 20333b00b49SSimon Pilgrim; SSE-NEXT: [[B10:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 10), align 4 20433b00b49SSimon Pilgrim; SSE-NEXT: [[B11:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 11), align 4 20533b00b49SSimon Pilgrim; SSE-NEXT: [[B12:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 12), align 4 20633b00b49SSimon Pilgrim; SSE-NEXT: [[B13:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 13), align 4 20733b00b49SSimon Pilgrim; SSE-NEXT: [[B14:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 14), align 4 20833b00b49SSimon Pilgrim; SSE-NEXT: [[B15:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 15), align 4 20933b00b49SSimon Pilgrim; SSE-NEXT: [[R0:%.*]] = call i32 @llvm.fshr.i32(i32 [[A0]], i32 [[A0]], i32 [[B0]]) 21033b00b49SSimon Pilgrim; SSE-NEXT: [[R1:%.*]] = call i32 @llvm.fshr.i32(i32 [[A1]], i32 [[A1]], i32 [[B1]]) 21133b00b49SSimon Pilgrim; SSE-NEXT: [[R2:%.*]] = call i32 @llvm.fshr.i32(i32 [[A2]], i32 [[A2]], i32 [[B2]]) 21233b00b49SSimon Pilgrim; SSE-NEXT: [[R3:%.*]] = call i32 @llvm.fshr.i32(i32 [[A3]], i32 [[A3]], i32 [[B3]]) 21333b00b49SSimon Pilgrim; SSE-NEXT: [[R4:%.*]] = call i32 @llvm.fshr.i32(i32 [[A4]], i32 [[A4]], i32 [[B4]]) 21433b00b49SSimon Pilgrim; SSE-NEXT: [[R5:%.*]] = call i32 @llvm.fshr.i32(i32 [[A5]], i32 [[A5]], i32 [[B5]]) 21533b00b49SSimon Pilgrim; SSE-NEXT: [[R6:%.*]] = call i32 @llvm.fshr.i32(i32 [[A6]], i32 [[A6]], i32 [[B6]]) 21633b00b49SSimon Pilgrim; SSE-NEXT: [[R7:%.*]] = call i32 @llvm.fshr.i32(i32 [[A7]], i32 [[A7]], i32 [[B7]]) 21733b00b49SSimon Pilgrim; SSE-NEXT: [[R8:%.*]] = call i32 @llvm.fshr.i32(i32 [[A8]], i32 [[A8]], i32 [[B8]]) 21833b00b49SSimon Pilgrim; SSE-NEXT: [[R9:%.*]] = call i32 @llvm.fshr.i32(i32 [[A9]], i32 [[A9]], i32 [[B9]]) 21933b00b49SSimon Pilgrim; SSE-NEXT: [[R10:%.*]] = call i32 @llvm.fshr.i32(i32 [[A10]], i32 [[A10]], i32 [[B10]]) 22033b00b49SSimon Pilgrim; SSE-NEXT: [[R11:%.*]] = call i32 @llvm.fshr.i32(i32 [[A11]], i32 [[A11]], i32 [[B11]]) 22133b00b49SSimon Pilgrim; SSE-NEXT: [[R12:%.*]] = call i32 @llvm.fshr.i32(i32 [[A12]], i32 [[A12]], i32 [[B12]]) 22233b00b49SSimon Pilgrim; SSE-NEXT: [[R13:%.*]] = call i32 @llvm.fshr.i32(i32 [[A13]], i32 [[A13]], i32 [[B13]]) 22333b00b49SSimon Pilgrim; SSE-NEXT: [[R14:%.*]] = call i32 @llvm.fshr.i32(i32 [[A14]], i32 [[A14]], i32 [[B14]]) 22433b00b49SSimon Pilgrim; SSE-NEXT: [[R15:%.*]] = call i32 @llvm.fshr.i32(i32 [[A15]], i32 [[A15]], i32 [[B15]]) 22533b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R0]], ptr @d32, align 4 22633b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R1]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 1), align 4 22733b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R2]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 2), align 4 22833b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R3]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 3), align 4 22933b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R4]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 4), align 4 23033b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R5]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 5), align 4 23133b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R6]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 6), align 4 23233b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R7]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 7), align 4 23333b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R8]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 8), align 4 23433b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R9]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 9), align 4 23533b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R10]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 10), align 4 23633b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R11]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 11), align 4 23733b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R12]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 12), align 4 23833b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R13]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 13), align 4 23933b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R14]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 14), align 4 24033b00b49SSimon Pilgrim; SSE-NEXT: store i32 [[R15]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 15), align 4 24133b00b49SSimon Pilgrim; SSE-NEXT: ret void 24233b00b49SSimon Pilgrim; 243*a12d7e4bSSimon Pilgrim; AVX1-LABEL: @fshr_v16i32( 244*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 4 245*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr @b32, align 4 246*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP3:%.*]] = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> [[TMP1]], <4 x i32> [[TMP1]], <4 x i32> [[TMP2]]) 247*a12d7e4bSSimon Pilgrim; AVX1-NEXT: store <4 x i32> [[TMP3]], ptr @d32, align 4 248*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 4 249*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 4), align 4 250*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP6:%.*]] = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> [[TMP4]], <4 x i32> [[TMP4]], <4 x i32> [[TMP5]]) 251*a12d7e4bSSimon Pilgrim; AVX1-NEXT: store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 4), align 4 252*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4 253*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP8:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 8), align 4 254*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP9:%.*]] = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> [[TMP7]], <4 x i32> [[TMP7]], <4 x i32> [[TMP8]]) 255*a12d7e4bSSimon Pilgrim; AVX1-NEXT: store <4 x i32> [[TMP9]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 8), align 4 256*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP10:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4 257*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP11:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 12), align 4 258*a12d7e4bSSimon Pilgrim; AVX1-NEXT: [[TMP12:%.*]] = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> [[TMP10]], <4 x i32> [[TMP10]], <4 x i32> [[TMP11]]) 259*a12d7e4bSSimon Pilgrim; AVX1-NEXT: store <4 x i32> [[TMP12]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 12), align 4 260*a12d7e4bSSimon Pilgrim; AVX1-NEXT: ret void 261*a12d7e4bSSimon Pilgrim; 262*a12d7e4bSSimon Pilgrim; AVX2-LABEL: @fshr_v16i32( 263*a12d7e4bSSimon Pilgrim; AVX2-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @a32, align 4 264*a12d7e4bSSimon Pilgrim; AVX2-NEXT: [[TMP2:%.*]] = load <8 x i32>, ptr @b32, align 4 265*a12d7e4bSSimon Pilgrim; AVX2-NEXT: [[TMP3:%.*]] = call <8 x i32> @llvm.fshr.v8i32(<8 x i32> [[TMP1]], <8 x i32> [[TMP1]], <8 x i32> [[TMP2]]) 266*a12d7e4bSSimon Pilgrim; AVX2-NEXT: store <8 x i32> [[TMP3]], ptr @d32, align 4 267*a12d7e4bSSimon Pilgrim; AVX2-NEXT: [[TMP4:%.*]] = load <8 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4 268*a12d7e4bSSimon Pilgrim; AVX2-NEXT: [[TMP5:%.*]] = load <8 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 8), align 4 269*a12d7e4bSSimon Pilgrim; AVX2-NEXT: [[TMP6:%.*]] = call <8 x i32> @llvm.fshr.v8i32(<8 x i32> [[TMP4]], <8 x i32> [[TMP4]], <8 x i32> [[TMP5]]) 270*a12d7e4bSSimon Pilgrim; AVX2-NEXT: store <8 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 8), align 4 271*a12d7e4bSSimon Pilgrim; AVX2-NEXT: ret void 272*a12d7e4bSSimon Pilgrim; 273*a12d7e4bSSimon Pilgrim; AVX256-LABEL: @fshr_v16i32( 274*a12d7e4bSSimon Pilgrim; AVX256-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @a32, align 4 275*a12d7e4bSSimon Pilgrim; AVX256-NEXT: [[TMP2:%.*]] = load <8 x i32>, ptr @b32, align 4 276*a12d7e4bSSimon Pilgrim; AVX256-NEXT: [[TMP3:%.*]] = call <8 x i32> @llvm.fshr.v8i32(<8 x i32> [[TMP1]], <8 x i32> [[TMP1]], <8 x i32> [[TMP2]]) 277*a12d7e4bSSimon Pilgrim; AVX256-NEXT: store <8 x i32> [[TMP3]], ptr @d32, align 4 278*a12d7e4bSSimon Pilgrim; AVX256-NEXT: [[TMP4:%.*]] = load <8 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4 279*a12d7e4bSSimon Pilgrim; AVX256-NEXT: [[TMP5:%.*]] = load <8 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 8), align 4 280*a12d7e4bSSimon Pilgrim; AVX256-NEXT: [[TMP6:%.*]] = call <8 x i32> @llvm.fshr.v8i32(<8 x i32> [[TMP4]], <8 x i32> [[TMP4]], <8 x i32> [[TMP5]]) 281*a12d7e4bSSimon Pilgrim; AVX256-NEXT: store <8 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 8), align 4 282*a12d7e4bSSimon Pilgrim; AVX256-NEXT: ret void 28333b00b49SSimon Pilgrim; 28433b00b49SSimon Pilgrim; AVX512-LABEL: @fshr_v16i32( 28533b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP1:%.*]] = load <16 x i32>, ptr @a32, align 4 28633b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP2:%.*]] = load <16 x i32>, ptr @b32, align 4 28733b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP3:%.*]] = call <16 x i32> @llvm.fshr.v16i32(<16 x i32> [[TMP1]], <16 x i32> [[TMP1]], <16 x i32> [[TMP2]]) 28833b00b49SSimon Pilgrim; AVX512-NEXT: store <16 x i32> [[TMP3]], ptr @d32, align 4 28933b00b49SSimon Pilgrim; AVX512-NEXT: ret void 29033b00b49SSimon Pilgrim; 29177465967SSimon Pilgrim; AVX512VBMI2-LABEL: @fshr_v16i32( 29277465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP1:%.*]] = load <16 x i32>, ptr @a32, align 4 29377465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP2:%.*]] = load <16 x i32>, ptr @b32, align 4 29477465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP3:%.*]] = call <16 x i32> @llvm.fshr.v16i32(<16 x i32> [[TMP1]], <16 x i32> [[TMP1]], <16 x i32> [[TMP2]]) 29577465967SSimon Pilgrim; AVX512VBMI2-NEXT: store <16 x i32> [[TMP3]], ptr @d32, align 4 29677465967SSimon Pilgrim; AVX512VBMI2-NEXT: ret void 29777465967SSimon Pilgrim; 29833b00b49SSimon Pilgrim %a0 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 0 ), align 4 29933b00b49SSimon Pilgrim %a1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1 ), align 4 30033b00b49SSimon Pilgrim %a2 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 2 ), align 4 30133b00b49SSimon Pilgrim %a3 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 3 ), align 4 30233b00b49SSimon Pilgrim %a4 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4 ), align 4 30333b00b49SSimon Pilgrim %a5 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 5 ), align 4 30433b00b49SSimon Pilgrim %a6 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 6 ), align 4 30533b00b49SSimon Pilgrim %a7 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 7 ), align 4 30633b00b49SSimon Pilgrim %a8 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8 ), align 4 30733b00b49SSimon Pilgrim %a9 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 9 ), align 4 30833b00b49SSimon Pilgrim %a10 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 10), align 4 30933b00b49SSimon Pilgrim %a11 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 11), align 4 31033b00b49SSimon Pilgrim %a12 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4 31133b00b49SSimon Pilgrim %a13 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 13), align 4 31233b00b49SSimon Pilgrim %a14 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 14), align 4 31333b00b49SSimon Pilgrim %a15 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 15), align 4 31433b00b49SSimon Pilgrim %b0 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 0 ), align 4 31533b00b49SSimon Pilgrim %b1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 1 ), align 4 31633b00b49SSimon Pilgrim %b2 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 2 ), align 4 31733b00b49SSimon Pilgrim %b3 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 3 ), align 4 31833b00b49SSimon Pilgrim %b4 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 4 ), align 4 31933b00b49SSimon Pilgrim %b5 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 5 ), align 4 32033b00b49SSimon Pilgrim %b6 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 6 ), align 4 32133b00b49SSimon Pilgrim %b7 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 7 ), align 4 32233b00b49SSimon Pilgrim %b8 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 8 ), align 4 32333b00b49SSimon Pilgrim %b9 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 9 ), align 4 32433b00b49SSimon Pilgrim %b10 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 10), align 4 32533b00b49SSimon Pilgrim %b11 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 11), align 4 32633b00b49SSimon Pilgrim %b12 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 12), align 4 32733b00b49SSimon Pilgrim %b13 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 13), align 4 32833b00b49SSimon Pilgrim %b14 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 14), align 4 32933b00b49SSimon Pilgrim %b15 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 15), align 4 33033b00b49SSimon Pilgrim %r0 = call i32 @llvm.fshr.i32(i32 %a0 , i32 %a0 , i32 %b0 ) 33133b00b49SSimon Pilgrim %r1 = call i32 @llvm.fshr.i32(i32 %a1 , i32 %a1 , i32 %b1 ) 33233b00b49SSimon Pilgrim %r2 = call i32 @llvm.fshr.i32(i32 %a2 , i32 %a2 , i32 %b2 ) 33333b00b49SSimon Pilgrim %r3 = call i32 @llvm.fshr.i32(i32 %a3 , i32 %a3 , i32 %b3 ) 33433b00b49SSimon Pilgrim %r4 = call i32 @llvm.fshr.i32(i32 %a4 , i32 %a4 , i32 %b4 ) 33533b00b49SSimon Pilgrim %r5 = call i32 @llvm.fshr.i32(i32 %a5 , i32 %a5 , i32 %b5 ) 33633b00b49SSimon Pilgrim %r6 = call i32 @llvm.fshr.i32(i32 %a6 , i32 %a6 , i32 %b6 ) 33733b00b49SSimon Pilgrim %r7 = call i32 @llvm.fshr.i32(i32 %a7 , i32 %a7 , i32 %b7 ) 33833b00b49SSimon Pilgrim %r8 = call i32 @llvm.fshr.i32(i32 %a8 , i32 %a8 , i32 %b8 ) 33933b00b49SSimon Pilgrim %r9 = call i32 @llvm.fshr.i32(i32 %a9 , i32 %a9 , i32 %b9 ) 34033b00b49SSimon Pilgrim %r10 = call i32 @llvm.fshr.i32(i32 %a10, i32 %a10, i32 %b10) 34133b00b49SSimon Pilgrim %r11 = call i32 @llvm.fshr.i32(i32 %a11, i32 %a11, i32 %b11) 34233b00b49SSimon Pilgrim %r12 = call i32 @llvm.fshr.i32(i32 %a12, i32 %a12, i32 %b12) 34333b00b49SSimon Pilgrim %r13 = call i32 @llvm.fshr.i32(i32 %a13, i32 %a13, i32 %b13) 34433b00b49SSimon Pilgrim %r14 = call i32 @llvm.fshr.i32(i32 %a14, i32 %a14, i32 %b14) 34533b00b49SSimon Pilgrim %r15 = call i32 @llvm.fshr.i32(i32 %a15, i32 %a15, i32 %b15) 34633b00b49SSimon Pilgrim store i32 %r0 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 0 ), align 4 34733b00b49SSimon Pilgrim store i32 %r1 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 1 ), align 4 34833b00b49SSimon Pilgrim store i32 %r2 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 2 ), align 4 34933b00b49SSimon Pilgrim store i32 %r3 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 3 ), align 4 35033b00b49SSimon Pilgrim store i32 %r4 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 4 ), align 4 35133b00b49SSimon Pilgrim store i32 %r5 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 5 ), align 4 35233b00b49SSimon Pilgrim store i32 %r6 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 6 ), align 4 35333b00b49SSimon Pilgrim store i32 %r7 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 7 ), align 4 35433b00b49SSimon Pilgrim store i32 %r8 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 8 ), align 4 35533b00b49SSimon Pilgrim store i32 %r9 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 9 ), align 4 35633b00b49SSimon Pilgrim store i32 %r10, ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 10), align 4 35733b00b49SSimon Pilgrim store i32 %r11, ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 11), align 4 35833b00b49SSimon Pilgrim store i32 %r12, ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 12), align 4 35933b00b49SSimon Pilgrim store i32 %r13, ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 13), align 4 36033b00b49SSimon Pilgrim store i32 %r14, ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 14), align 4 36133b00b49SSimon Pilgrim store i32 %r15, ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 15), align 4 36233b00b49SSimon Pilgrim ret void 36333b00b49SSimon Pilgrim} 36433b00b49SSimon Pilgrim 36533b00b49SSimon Pilgrimdefine void @fshr_v32i16() { 366*a12d7e4bSSimon Pilgrim; SSE-LABEL: @fshr_v32i16( 367*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A0:%.*]] = load i16, ptr @a16, align 2 368*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A1:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 1), align 2 369*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A2:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 2), align 2 370*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A3:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 3), align 2 371*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A4:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 4), align 2 372*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A5:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 5), align 2 373*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A6:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 6), align 2 374*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A7:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 7), align 2 375*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A8:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 8), align 2 376*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A9:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 9), align 2 377*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A10:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 10), align 2 378*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A11:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 11), align 2 379*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A12:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 12), align 2 380*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A13:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 13), align 2 381*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A14:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 14), align 2 382*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A15:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 15), align 2 383*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A16:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 16), align 2 384*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A17:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 17), align 2 385*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A18:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 18), align 2 386*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A19:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 19), align 2 387*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A20:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 20), align 2 388*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A21:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 21), align 2 389*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A22:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 22), align 2 390*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A23:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 23), align 2 391*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A24:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 24), align 2 392*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A25:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 25), align 2 393*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A26:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 26), align 2 394*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A27:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 27), align 2 395*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A28:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 28), align 2 396*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A29:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 29), align 2 397*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A30:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 30), align 2 398*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[A31:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 31), align 2 399*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B0:%.*]] = load i16, ptr @b16, align 2 400*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B1:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 1), align 2 401*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B2:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 2), align 2 402*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B3:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 3), align 2 403*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B4:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 4), align 2 404*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B5:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 5), align 2 405*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B6:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 6), align 2 406*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B7:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 7), align 2 407*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B8:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 8), align 2 408*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B9:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 9), align 2 409*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B10:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 10), align 2 410*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B11:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 11), align 2 411*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B12:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 12), align 2 412*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B13:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 13), align 2 413*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B14:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 14), align 2 414*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B15:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 15), align 2 415*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B16:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 16), align 2 416*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B17:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 17), align 2 417*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B18:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 18), align 2 418*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B19:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 19), align 2 419*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B20:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 20), align 2 420*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B21:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 21), align 2 421*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B22:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 22), align 2 422*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B23:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 23), align 2 423*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B24:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 24), align 2 424*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B25:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 25), align 2 425*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B26:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 26), align 2 426*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B27:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 27), align 2 427*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B28:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 28), align 2 428*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B29:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 29), align 2 429*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B30:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 30), align 2 430*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[B31:%.*]] = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 31), align 2 431*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R0:%.*]] = call i16 @llvm.fshr.i16(i16 [[A0]], i16 [[A0]], i16 [[B0]]) 432*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R1:%.*]] = call i16 @llvm.fshr.i16(i16 [[A1]], i16 [[A1]], i16 [[B1]]) 433*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R2:%.*]] = call i16 @llvm.fshr.i16(i16 [[A2]], i16 [[A2]], i16 [[B2]]) 434*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R3:%.*]] = call i16 @llvm.fshr.i16(i16 [[A3]], i16 [[A3]], i16 [[B3]]) 435*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R4:%.*]] = call i16 @llvm.fshr.i16(i16 [[A4]], i16 [[A4]], i16 [[B4]]) 436*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R5:%.*]] = call i16 @llvm.fshr.i16(i16 [[A5]], i16 [[A5]], i16 [[B5]]) 437*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R6:%.*]] = call i16 @llvm.fshr.i16(i16 [[A6]], i16 [[A6]], i16 [[B6]]) 438*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R7:%.*]] = call i16 @llvm.fshr.i16(i16 [[A7]], i16 [[A7]], i16 [[B7]]) 439*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R8:%.*]] = call i16 @llvm.fshr.i16(i16 [[A8]], i16 [[A8]], i16 [[B8]]) 440*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R9:%.*]] = call i16 @llvm.fshr.i16(i16 [[A9]], i16 [[A9]], i16 [[B9]]) 441*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R10:%.*]] = call i16 @llvm.fshr.i16(i16 [[A10]], i16 [[A10]], i16 [[B10]]) 442*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R11:%.*]] = call i16 @llvm.fshr.i16(i16 [[A11]], i16 [[A11]], i16 [[B11]]) 443*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R12:%.*]] = call i16 @llvm.fshr.i16(i16 [[A12]], i16 [[A12]], i16 [[B12]]) 444*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R13:%.*]] = call i16 @llvm.fshr.i16(i16 [[A13]], i16 [[A13]], i16 [[B13]]) 445*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R14:%.*]] = call i16 @llvm.fshr.i16(i16 [[A14]], i16 [[A14]], i16 [[B14]]) 446*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R15:%.*]] = call i16 @llvm.fshr.i16(i16 [[A15]], i16 [[A15]], i16 [[B15]]) 447*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R16:%.*]] = call i16 @llvm.fshr.i16(i16 [[A16]], i16 [[A16]], i16 [[B16]]) 448*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R17:%.*]] = call i16 @llvm.fshr.i16(i16 [[A17]], i16 [[A17]], i16 [[B17]]) 449*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R18:%.*]] = call i16 @llvm.fshr.i16(i16 [[A18]], i16 [[A18]], i16 [[B18]]) 450*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R19:%.*]] = call i16 @llvm.fshr.i16(i16 [[A19]], i16 [[A19]], i16 [[B19]]) 451*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R20:%.*]] = call i16 @llvm.fshr.i16(i16 [[A20]], i16 [[A20]], i16 [[B20]]) 452*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R21:%.*]] = call i16 @llvm.fshr.i16(i16 [[A21]], i16 [[A21]], i16 [[B21]]) 453*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R22:%.*]] = call i16 @llvm.fshr.i16(i16 [[A22]], i16 [[A22]], i16 [[B22]]) 454*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R23:%.*]] = call i16 @llvm.fshr.i16(i16 [[A23]], i16 [[A23]], i16 [[B23]]) 455*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R24:%.*]] = call i16 @llvm.fshr.i16(i16 [[A24]], i16 [[A24]], i16 [[B24]]) 456*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R25:%.*]] = call i16 @llvm.fshr.i16(i16 [[A25]], i16 [[A25]], i16 [[B25]]) 457*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R26:%.*]] = call i16 @llvm.fshr.i16(i16 [[A26]], i16 [[A26]], i16 [[B26]]) 458*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R27:%.*]] = call i16 @llvm.fshr.i16(i16 [[A27]], i16 [[A27]], i16 [[B27]]) 459*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R28:%.*]] = call i16 @llvm.fshr.i16(i16 [[A28]], i16 [[A28]], i16 [[B28]]) 460*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R29:%.*]] = call i16 @llvm.fshr.i16(i16 [[A29]], i16 [[A29]], i16 [[B29]]) 461*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R30:%.*]] = call i16 @llvm.fshr.i16(i16 [[A30]], i16 [[A30]], i16 [[B30]]) 462*a12d7e4bSSimon Pilgrim; SSE-NEXT: [[R31:%.*]] = call i16 @llvm.fshr.i16(i16 [[A31]], i16 [[A31]], i16 [[B31]]) 463*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R0]], ptr @d16, align 2 464*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R1]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 1), align 2 465*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R2]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 2), align 2 466*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R3]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 3), align 2 467*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R4]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 4), align 2 468*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R5]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 5), align 2 469*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R6]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 6), align 2 470*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R7]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 7), align 2 471*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R8]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 8), align 2 472*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R9]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 9), align 2 473*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R10]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 10), align 2 474*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R11]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 11), align 2 475*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R12]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 12), align 2 476*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R13]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 13), align 2 477*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R14]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 14), align 2 478*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R15]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 15), align 2 479*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R16]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 16), align 2 480*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R17]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 17), align 2 481*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R18]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 18), align 2 482*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R19]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 19), align 2 483*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R20]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 20), align 2 484*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R21]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 21), align 2 485*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R22]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 22), align 2 486*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R23]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 23), align 2 487*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R24]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 24), align 2 488*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R25]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 25), align 2 489*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R26]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 26), align 2 490*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R27]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 27), align 2 491*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R28]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 28), align 2 492*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R29]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 29), align 2 493*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R30]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 30), align 2 494*a12d7e4bSSimon Pilgrim; SSE-NEXT: store i16 [[R31]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 31), align 2 495*a12d7e4bSSimon Pilgrim; SSE-NEXT: ret void 496625e0a40SSimon Pilgrim; 49733b00b49SSimon Pilgrim; AVX-LABEL: @fshr_v32i16( 49833b00b49SSimon Pilgrim; AVX-NEXT: [[TMP1:%.*]] = load <16 x i16>, ptr @a16, align 2 49933b00b49SSimon Pilgrim; AVX-NEXT: [[TMP2:%.*]] = load <16 x i16>, ptr @b16, align 2 50033b00b49SSimon Pilgrim; AVX-NEXT: [[TMP3:%.*]] = call <16 x i16> @llvm.fshr.v16i16(<16 x i16> [[TMP1]], <16 x i16> [[TMP1]], <16 x i16> [[TMP2]]) 50133b00b49SSimon Pilgrim; AVX-NEXT: store <16 x i16> [[TMP3]], ptr @d16, align 2 50233b00b49SSimon Pilgrim; AVX-NEXT: [[TMP4:%.*]] = load <16 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 16), align 2 50333b00b49SSimon Pilgrim; AVX-NEXT: [[TMP5:%.*]] = load <16 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 16), align 2 50433b00b49SSimon Pilgrim; AVX-NEXT: [[TMP6:%.*]] = call <16 x i16> @llvm.fshr.v16i16(<16 x i16> [[TMP4]], <16 x i16> [[TMP4]], <16 x i16> [[TMP5]]) 50533b00b49SSimon Pilgrim; AVX-NEXT: store <16 x i16> [[TMP6]], ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 16), align 2 50633b00b49SSimon Pilgrim; AVX-NEXT: ret void 50733b00b49SSimon Pilgrim; 50833b00b49SSimon Pilgrim; AVX512-LABEL: @fshr_v32i16( 50933b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP1:%.*]] = load <32 x i16>, ptr @a16, align 2 51033b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP2:%.*]] = load <32 x i16>, ptr @b16, align 2 51133b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP3:%.*]] = call <32 x i16> @llvm.fshr.v32i16(<32 x i16> [[TMP1]], <32 x i16> [[TMP1]], <32 x i16> [[TMP2]]) 51233b00b49SSimon Pilgrim; AVX512-NEXT: store <32 x i16> [[TMP3]], ptr @d16, align 2 51333b00b49SSimon Pilgrim; AVX512-NEXT: ret void 51433b00b49SSimon Pilgrim; 51577465967SSimon Pilgrim; AVX512VBMI2-LABEL: @fshr_v32i16( 51677465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP1:%.*]] = load <32 x i16>, ptr @a16, align 2 51777465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP2:%.*]] = load <32 x i16>, ptr @b16, align 2 51877465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP3:%.*]] = call <32 x i16> @llvm.fshr.v32i16(<32 x i16> [[TMP1]], <32 x i16> [[TMP1]], <32 x i16> [[TMP2]]) 51977465967SSimon Pilgrim; AVX512VBMI2-NEXT: store <32 x i16> [[TMP3]], ptr @d16, align 2 52077465967SSimon Pilgrim; AVX512VBMI2-NEXT: ret void 52177465967SSimon Pilgrim; 52233b00b49SSimon Pilgrim %a0 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 0 ), align 2 52333b00b49SSimon Pilgrim %a1 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 1 ), align 2 52433b00b49SSimon Pilgrim %a2 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 2 ), align 2 52533b00b49SSimon Pilgrim %a3 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 3 ), align 2 52633b00b49SSimon Pilgrim %a4 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 4 ), align 2 52733b00b49SSimon Pilgrim %a5 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 5 ), align 2 52833b00b49SSimon Pilgrim %a6 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 6 ), align 2 52933b00b49SSimon Pilgrim %a7 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 7 ), align 2 53033b00b49SSimon Pilgrim %a8 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 8 ), align 2 53133b00b49SSimon Pilgrim %a9 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 9 ), align 2 53233b00b49SSimon Pilgrim %a10 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 10), align 2 53333b00b49SSimon Pilgrim %a11 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 11), align 2 53433b00b49SSimon Pilgrim %a12 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 12), align 2 53533b00b49SSimon Pilgrim %a13 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 13), align 2 53633b00b49SSimon Pilgrim %a14 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 14), align 2 53733b00b49SSimon Pilgrim %a15 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 15), align 2 53833b00b49SSimon Pilgrim %a16 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 16), align 2 53933b00b49SSimon Pilgrim %a17 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 17), align 2 54033b00b49SSimon Pilgrim %a18 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 18), align 2 54133b00b49SSimon Pilgrim %a19 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 19), align 2 54233b00b49SSimon Pilgrim %a20 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 20), align 2 54333b00b49SSimon Pilgrim %a21 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 21), align 2 54433b00b49SSimon Pilgrim %a22 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 22), align 2 54533b00b49SSimon Pilgrim %a23 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 23), align 2 54633b00b49SSimon Pilgrim %a24 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 24), align 2 54733b00b49SSimon Pilgrim %a25 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 25), align 2 54833b00b49SSimon Pilgrim %a26 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 26), align 2 54933b00b49SSimon Pilgrim %a27 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 27), align 2 55033b00b49SSimon Pilgrim %a28 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 28), align 2 55133b00b49SSimon Pilgrim %a29 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 29), align 2 55233b00b49SSimon Pilgrim %a30 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 30), align 2 55333b00b49SSimon Pilgrim %a31 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 31), align 2 55433b00b49SSimon Pilgrim %b0 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 0 ), align 2 55533b00b49SSimon Pilgrim %b1 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 1 ), align 2 55633b00b49SSimon Pilgrim %b2 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 2 ), align 2 55733b00b49SSimon Pilgrim %b3 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 3 ), align 2 55833b00b49SSimon Pilgrim %b4 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 4 ), align 2 55933b00b49SSimon Pilgrim %b5 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 5 ), align 2 56033b00b49SSimon Pilgrim %b6 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 6 ), align 2 56133b00b49SSimon Pilgrim %b7 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 7 ), align 2 56233b00b49SSimon Pilgrim %b8 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 8 ), align 2 56333b00b49SSimon Pilgrim %b9 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 9 ), align 2 56433b00b49SSimon Pilgrim %b10 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 10), align 2 56533b00b49SSimon Pilgrim %b11 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 11), align 2 56633b00b49SSimon Pilgrim %b12 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 12), align 2 56733b00b49SSimon Pilgrim %b13 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 13), align 2 56833b00b49SSimon Pilgrim %b14 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 14), align 2 56933b00b49SSimon Pilgrim %b15 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 15), align 2 57033b00b49SSimon Pilgrim %b16 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 16), align 2 57133b00b49SSimon Pilgrim %b17 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 17), align 2 57233b00b49SSimon Pilgrim %b18 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 18), align 2 57333b00b49SSimon Pilgrim %b19 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 19), align 2 57433b00b49SSimon Pilgrim %b20 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 20), align 2 57533b00b49SSimon Pilgrim %b21 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 21), align 2 57633b00b49SSimon Pilgrim %b22 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 22), align 2 57733b00b49SSimon Pilgrim %b23 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 23), align 2 57833b00b49SSimon Pilgrim %b24 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 24), align 2 57933b00b49SSimon Pilgrim %b25 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 25), align 2 58033b00b49SSimon Pilgrim %b26 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 26), align 2 58133b00b49SSimon Pilgrim %b27 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 27), align 2 58233b00b49SSimon Pilgrim %b28 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 28), align 2 58333b00b49SSimon Pilgrim %b29 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 29), align 2 58433b00b49SSimon Pilgrim %b30 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 30), align 2 58533b00b49SSimon Pilgrim %b31 = load i16, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 31), align 2 58633b00b49SSimon Pilgrim %r0 = call i16 @llvm.fshr.i16(i16 %a0 , i16 %a0 , i16 %b0 ) 58733b00b49SSimon Pilgrim %r1 = call i16 @llvm.fshr.i16(i16 %a1 , i16 %a1 , i16 %b1 ) 58833b00b49SSimon Pilgrim %r2 = call i16 @llvm.fshr.i16(i16 %a2 , i16 %a2 , i16 %b2 ) 58933b00b49SSimon Pilgrim %r3 = call i16 @llvm.fshr.i16(i16 %a3 , i16 %a3 , i16 %b3 ) 59033b00b49SSimon Pilgrim %r4 = call i16 @llvm.fshr.i16(i16 %a4 , i16 %a4 , i16 %b4 ) 59133b00b49SSimon Pilgrim %r5 = call i16 @llvm.fshr.i16(i16 %a5 , i16 %a5 , i16 %b5 ) 59233b00b49SSimon Pilgrim %r6 = call i16 @llvm.fshr.i16(i16 %a6 , i16 %a6 , i16 %b6 ) 59333b00b49SSimon Pilgrim %r7 = call i16 @llvm.fshr.i16(i16 %a7 , i16 %a7 , i16 %b7 ) 59433b00b49SSimon Pilgrim %r8 = call i16 @llvm.fshr.i16(i16 %a8 , i16 %a8 , i16 %b8 ) 59533b00b49SSimon Pilgrim %r9 = call i16 @llvm.fshr.i16(i16 %a9 , i16 %a9 , i16 %b9 ) 59633b00b49SSimon Pilgrim %r10 = call i16 @llvm.fshr.i16(i16 %a10, i16 %a10, i16 %b10) 59733b00b49SSimon Pilgrim %r11 = call i16 @llvm.fshr.i16(i16 %a11, i16 %a11, i16 %b11) 59833b00b49SSimon Pilgrim %r12 = call i16 @llvm.fshr.i16(i16 %a12, i16 %a12, i16 %b12) 59933b00b49SSimon Pilgrim %r13 = call i16 @llvm.fshr.i16(i16 %a13, i16 %a13, i16 %b13) 60033b00b49SSimon Pilgrim %r14 = call i16 @llvm.fshr.i16(i16 %a14, i16 %a14, i16 %b14) 60133b00b49SSimon Pilgrim %r15 = call i16 @llvm.fshr.i16(i16 %a15, i16 %a15, i16 %b15) 60233b00b49SSimon Pilgrim %r16 = call i16 @llvm.fshr.i16(i16 %a16, i16 %a16, i16 %b16) 60333b00b49SSimon Pilgrim %r17 = call i16 @llvm.fshr.i16(i16 %a17, i16 %a17, i16 %b17) 60433b00b49SSimon Pilgrim %r18 = call i16 @llvm.fshr.i16(i16 %a18, i16 %a18, i16 %b18) 60533b00b49SSimon Pilgrim %r19 = call i16 @llvm.fshr.i16(i16 %a19, i16 %a19, i16 %b19) 60633b00b49SSimon Pilgrim %r20 = call i16 @llvm.fshr.i16(i16 %a20, i16 %a20, i16 %b20) 60733b00b49SSimon Pilgrim %r21 = call i16 @llvm.fshr.i16(i16 %a21, i16 %a21, i16 %b21) 60833b00b49SSimon Pilgrim %r22 = call i16 @llvm.fshr.i16(i16 %a22, i16 %a22, i16 %b22) 60933b00b49SSimon Pilgrim %r23 = call i16 @llvm.fshr.i16(i16 %a23, i16 %a23, i16 %b23) 61033b00b49SSimon Pilgrim %r24 = call i16 @llvm.fshr.i16(i16 %a24, i16 %a24, i16 %b24) 61133b00b49SSimon Pilgrim %r25 = call i16 @llvm.fshr.i16(i16 %a25, i16 %a25, i16 %b25) 61233b00b49SSimon Pilgrim %r26 = call i16 @llvm.fshr.i16(i16 %a26, i16 %a26, i16 %b26) 61333b00b49SSimon Pilgrim %r27 = call i16 @llvm.fshr.i16(i16 %a27, i16 %a27, i16 %b27) 61433b00b49SSimon Pilgrim %r28 = call i16 @llvm.fshr.i16(i16 %a28, i16 %a28, i16 %b28) 61533b00b49SSimon Pilgrim %r29 = call i16 @llvm.fshr.i16(i16 %a29, i16 %a29, i16 %b29) 61633b00b49SSimon Pilgrim %r30 = call i16 @llvm.fshr.i16(i16 %a30, i16 %a30, i16 %b30) 61733b00b49SSimon Pilgrim %r31 = call i16 @llvm.fshr.i16(i16 %a31, i16 %a31, i16 %b31) 61833b00b49SSimon Pilgrim store i16 %r0 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 0 ), align 2 61933b00b49SSimon Pilgrim store i16 %r1 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 1 ), align 2 62033b00b49SSimon Pilgrim store i16 %r2 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 2 ), align 2 62133b00b49SSimon Pilgrim store i16 %r3 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 3 ), align 2 62233b00b49SSimon Pilgrim store i16 %r4 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 4 ), align 2 62333b00b49SSimon Pilgrim store i16 %r5 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 5 ), align 2 62433b00b49SSimon Pilgrim store i16 %r6 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 6 ), align 2 62533b00b49SSimon Pilgrim store i16 %r7 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 7 ), align 2 62633b00b49SSimon Pilgrim store i16 %r8 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 8 ), align 2 62733b00b49SSimon Pilgrim store i16 %r9 , ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 9 ), align 2 62833b00b49SSimon Pilgrim store i16 %r10, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 10), align 2 62933b00b49SSimon Pilgrim store i16 %r11, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 11), align 2 63033b00b49SSimon Pilgrim store i16 %r12, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 12), align 2 63133b00b49SSimon Pilgrim store i16 %r13, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 13), align 2 63233b00b49SSimon Pilgrim store i16 %r14, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 14), align 2 63333b00b49SSimon Pilgrim store i16 %r15, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 15), align 2 63433b00b49SSimon Pilgrim store i16 %r16, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 16), align 2 63533b00b49SSimon Pilgrim store i16 %r17, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 17), align 2 63633b00b49SSimon Pilgrim store i16 %r18, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 18), align 2 63733b00b49SSimon Pilgrim store i16 %r19, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 19), align 2 63833b00b49SSimon Pilgrim store i16 %r20, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 20), align 2 63933b00b49SSimon Pilgrim store i16 %r21, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 21), align 2 64033b00b49SSimon Pilgrim store i16 %r22, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 22), align 2 64133b00b49SSimon Pilgrim store i16 %r23, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 23), align 2 64233b00b49SSimon Pilgrim store i16 %r24, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 24), align 2 64333b00b49SSimon Pilgrim store i16 %r25, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 25), align 2 64433b00b49SSimon Pilgrim store i16 %r26, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 26), align 2 64533b00b49SSimon Pilgrim store i16 %r27, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 27), align 2 64633b00b49SSimon Pilgrim store i16 %r28, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 28), align 2 64733b00b49SSimon Pilgrim store i16 %r29, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 29), align 2 64833b00b49SSimon Pilgrim store i16 %r30, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 30), align 2 64933b00b49SSimon Pilgrim store i16 %r31, ptr getelementptr inbounds ([32 x i16], ptr @d16, i32 0, i64 31), align 2 65033b00b49SSimon Pilgrim ret void 65133b00b49SSimon Pilgrim} 65233b00b49SSimon Pilgrim 65333b00b49SSimon Pilgrimdefine void @fshr_v64i8() { 65433b00b49SSimon Pilgrim; SSE-LABEL: @fshr_v64i8( 65533b00b49SSimon Pilgrim; SSE-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @a8, align 1 65633b00b49SSimon Pilgrim; SSE-NEXT: [[TMP2:%.*]] = load <16 x i8>, ptr @b8, align 1 65733b00b49SSimon Pilgrim; SSE-NEXT: [[TMP3:%.*]] = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> [[TMP1]], <16 x i8> [[TMP1]], <16 x i8> [[TMP2]]) 65833b00b49SSimon Pilgrim; SSE-NEXT: store <16 x i8> [[TMP3]], ptr @d8, align 1 65933b00b49SSimon Pilgrim; SSE-NEXT: [[TMP4:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 16), align 1 66033b00b49SSimon Pilgrim; SSE-NEXT: [[TMP5:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 16), align 1 66133b00b49SSimon Pilgrim; SSE-NEXT: [[TMP6:%.*]] = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> [[TMP4]], <16 x i8> [[TMP4]], <16 x i8> [[TMP5]]) 66233b00b49SSimon Pilgrim; SSE-NEXT: store <16 x i8> [[TMP6]], ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 16), align 1 66333b00b49SSimon Pilgrim; SSE-NEXT: [[TMP7:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 32), align 1 66433b00b49SSimon Pilgrim; SSE-NEXT: [[TMP8:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 32), align 1 66533b00b49SSimon Pilgrim; SSE-NEXT: [[TMP9:%.*]] = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> [[TMP7]], <16 x i8> [[TMP7]], <16 x i8> [[TMP8]]) 66638511864SAlexey Bataev; SSE-NEXT: store <16 x i8> [[TMP9]], ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 32), align 1 66733b00b49SSimon Pilgrim; SSE-NEXT: [[TMP10:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 48), align 1 66833b00b49SSimon Pilgrim; SSE-NEXT: [[TMP11:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 48), align 1 66933b00b49SSimon Pilgrim; SSE-NEXT: [[TMP12:%.*]] = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> [[TMP10]], <16 x i8> [[TMP10]], <16 x i8> [[TMP11]]) 67033b00b49SSimon Pilgrim; SSE-NEXT: store <16 x i8> [[TMP12]], ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 48), align 1 67133b00b49SSimon Pilgrim; SSE-NEXT: ret void 67233b00b49SSimon Pilgrim; 67333b00b49SSimon Pilgrim; AVX-LABEL: @fshr_v64i8( 67433b00b49SSimon Pilgrim; AVX-NEXT: [[TMP1:%.*]] = load <32 x i8>, ptr @a8, align 1 67533b00b49SSimon Pilgrim; AVX-NEXT: [[TMP2:%.*]] = load <32 x i8>, ptr @b8, align 1 67633b00b49SSimon Pilgrim; AVX-NEXT: [[TMP3:%.*]] = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> [[TMP1]], <32 x i8> [[TMP1]], <32 x i8> [[TMP2]]) 67733b00b49SSimon Pilgrim; AVX-NEXT: store <32 x i8> [[TMP3]], ptr @d8, align 1 67833b00b49SSimon Pilgrim; AVX-NEXT: [[TMP4:%.*]] = load <32 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 32), align 1 67933b00b49SSimon Pilgrim; AVX-NEXT: [[TMP5:%.*]] = load <32 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 32), align 1 68033b00b49SSimon Pilgrim; AVX-NEXT: [[TMP6:%.*]] = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> [[TMP4]], <32 x i8> [[TMP4]], <32 x i8> [[TMP5]]) 68133b00b49SSimon Pilgrim; AVX-NEXT: store <32 x i8> [[TMP6]], ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 32), align 1 68233b00b49SSimon Pilgrim; AVX-NEXT: ret void 68333b00b49SSimon Pilgrim; 68433b00b49SSimon Pilgrim; AVX512-LABEL: @fshr_v64i8( 68533b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP1:%.*]] = load <64 x i8>, ptr @a8, align 1 68633b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP2:%.*]] = load <64 x i8>, ptr @b8, align 1 68733b00b49SSimon Pilgrim; AVX512-NEXT: [[TMP3:%.*]] = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> [[TMP1]], <64 x i8> [[TMP1]], <64 x i8> [[TMP2]]) 68833b00b49SSimon Pilgrim; AVX512-NEXT: store <64 x i8> [[TMP3]], ptr @d8, align 1 68933b00b49SSimon Pilgrim; AVX512-NEXT: ret void 69033b00b49SSimon Pilgrim; 69177465967SSimon Pilgrim; AVX512VBMI2-LABEL: @fshr_v64i8( 69277465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP1:%.*]] = load <64 x i8>, ptr @a8, align 1 69377465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP2:%.*]] = load <64 x i8>, ptr @b8, align 1 69477465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP3:%.*]] = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> [[TMP1]], <64 x i8> [[TMP1]], <64 x i8> [[TMP2]]) 69577465967SSimon Pilgrim; AVX512VBMI2-NEXT: store <64 x i8> [[TMP3]], ptr @d8, align 1 69677465967SSimon Pilgrim; AVX512VBMI2-NEXT: ret void 69777465967SSimon Pilgrim; 69833b00b49SSimon Pilgrim %a0 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 0 ), align 1 69933b00b49SSimon Pilgrim %a1 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 1 ), align 1 70033b00b49SSimon Pilgrim %a2 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 2 ), align 1 70133b00b49SSimon Pilgrim %a3 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 3 ), align 1 70233b00b49SSimon Pilgrim %a4 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 4 ), align 1 70333b00b49SSimon Pilgrim %a5 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 5 ), align 1 70433b00b49SSimon Pilgrim %a6 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 6 ), align 1 70533b00b49SSimon Pilgrim %a7 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 7 ), align 1 70633b00b49SSimon Pilgrim %a8 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 8 ), align 1 70733b00b49SSimon Pilgrim %a9 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 9 ), align 1 70833b00b49SSimon Pilgrim %a10 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 10), align 1 70933b00b49SSimon Pilgrim %a11 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 11), align 1 71033b00b49SSimon Pilgrim %a12 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 12), align 1 71133b00b49SSimon Pilgrim %a13 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 13), align 1 71233b00b49SSimon Pilgrim %a14 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 14), align 1 71333b00b49SSimon Pilgrim %a15 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 15), align 1 71433b00b49SSimon Pilgrim %a16 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 16), align 1 71533b00b49SSimon Pilgrim %a17 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 17), align 1 71633b00b49SSimon Pilgrim %a18 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 18), align 1 71733b00b49SSimon Pilgrim %a19 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 19), align 1 71833b00b49SSimon Pilgrim %a20 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 20), align 1 71933b00b49SSimon Pilgrim %a21 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 21), align 1 72033b00b49SSimon Pilgrim %a22 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 22), align 1 72133b00b49SSimon Pilgrim %a23 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 23), align 1 72233b00b49SSimon Pilgrim %a24 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 24), align 1 72333b00b49SSimon Pilgrim %a25 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 25), align 1 72433b00b49SSimon Pilgrim %a26 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 26), align 1 72533b00b49SSimon Pilgrim %a27 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 27), align 1 72633b00b49SSimon Pilgrim %a28 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 28), align 1 72733b00b49SSimon Pilgrim %a29 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 29), align 1 72833b00b49SSimon Pilgrim %a30 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 30), align 1 72933b00b49SSimon Pilgrim %a31 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 31), align 1 73033b00b49SSimon Pilgrim %a32 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 32), align 1 73133b00b49SSimon Pilgrim %a33 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 33), align 1 73233b00b49SSimon Pilgrim %a34 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 34), align 1 73333b00b49SSimon Pilgrim %a35 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 35), align 1 73433b00b49SSimon Pilgrim %a36 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 36), align 1 73533b00b49SSimon Pilgrim %a37 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 37), align 1 73633b00b49SSimon Pilgrim %a38 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 38), align 1 73733b00b49SSimon Pilgrim %a39 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 39), align 1 73833b00b49SSimon Pilgrim %a40 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 40), align 1 73933b00b49SSimon Pilgrim %a41 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 41), align 1 74033b00b49SSimon Pilgrim %a42 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 42), align 1 74133b00b49SSimon Pilgrim %a43 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 43), align 1 74233b00b49SSimon Pilgrim %a44 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 44), align 1 74333b00b49SSimon Pilgrim %a45 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 45), align 1 74433b00b49SSimon Pilgrim %a46 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 46), align 1 74533b00b49SSimon Pilgrim %a47 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 47), align 1 74633b00b49SSimon Pilgrim %a48 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 48), align 1 74733b00b49SSimon Pilgrim %a49 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 49), align 1 74833b00b49SSimon Pilgrim %a50 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 50), align 1 74933b00b49SSimon Pilgrim %a51 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 51), align 1 75033b00b49SSimon Pilgrim %a52 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 52), align 1 75133b00b49SSimon Pilgrim %a53 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 53), align 1 75233b00b49SSimon Pilgrim %a54 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 54), align 1 75333b00b49SSimon Pilgrim %a55 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 55), align 1 75433b00b49SSimon Pilgrim %a56 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 56), align 1 75533b00b49SSimon Pilgrim %a57 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 57), align 1 75633b00b49SSimon Pilgrim %a58 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 58), align 1 75733b00b49SSimon Pilgrim %a59 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 59), align 1 75833b00b49SSimon Pilgrim %a60 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 60), align 1 75933b00b49SSimon Pilgrim %a61 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 61), align 1 76033b00b49SSimon Pilgrim %a62 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 62), align 1 76133b00b49SSimon Pilgrim %a63 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 63), align 1 76233b00b49SSimon Pilgrim %b0 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 0 ), align 1 76333b00b49SSimon Pilgrim %b1 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 1 ), align 1 76433b00b49SSimon Pilgrim %b2 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 2 ), align 1 76533b00b49SSimon Pilgrim %b3 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 3 ), align 1 76633b00b49SSimon Pilgrim %b4 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 4 ), align 1 76733b00b49SSimon Pilgrim %b5 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 5 ), align 1 76833b00b49SSimon Pilgrim %b6 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 6 ), align 1 76933b00b49SSimon Pilgrim %b7 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 7 ), align 1 77033b00b49SSimon Pilgrim %b8 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 8 ), align 1 77133b00b49SSimon Pilgrim %b9 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 9 ), align 1 77233b00b49SSimon Pilgrim %b10 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 10), align 1 77333b00b49SSimon Pilgrim %b11 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 11), align 1 77433b00b49SSimon Pilgrim %b12 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 12), align 1 77533b00b49SSimon Pilgrim %b13 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 13), align 1 77633b00b49SSimon Pilgrim %b14 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 14), align 1 77733b00b49SSimon Pilgrim %b15 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 15), align 1 77833b00b49SSimon Pilgrim %b16 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 16), align 1 77933b00b49SSimon Pilgrim %b17 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 17), align 1 78033b00b49SSimon Pilgrim %b18 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 18), align 1 78133b00b49SSimon Pilgrim %b19 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 19), align 1 78233b00b49SSimon Pilgrim %b20 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 20), align 1 78333b00b49SSimon Pilgrim %b21 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 21), align 1 78433b00b49SSimon Pilgrim %b22 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 22), align 1 78533b00b49SSimon Pilgrim %b23 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 23), align 1 78633b00b49SSimon Pilgrim %b24 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 24), align 1 78733b00b49SSimon Pilgrim %b25 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 25), align 1 78833b00b49SSimon Pilgrim %b26 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 26), align 1 78933b00b49SSimon Pilgrim %b27 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 27), align 1 79033b00b49SSimon Pilgrim %b28 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 28), align 1 79133b00b49SSimon Pilgrim %b29 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 29), align 1 79233b00b49SSimon Pilgrim %b30 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 30), align 1 79333b00b49SSimon Pilgrim %b31 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 31), align 1 79433b00b49SSimon Pilgrim %b32 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 32), align 1 79533b00b49SSimon Pilgrim %b33 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 33), align 1 79633b00b49SSimon Pilgrim %b34 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 34), align 1 79733b00b49SSimon Pilgrim %b35 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 35), align 1 79833b00b49SSimon Pilgrim %b36 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 36), align 1 79933b00b49SSimon Pilgrim %b37 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 37), align 1 80033b00b49SSimon Pilgrim %b38 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 38), align 1 80133b00b49SSimon Pilgrim %b39 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 39), align 1 80233b00b49SSimon Pilgrim %b40 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 40), align 1 80333b00b49SSimon Pilgrim %b41 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 41), align 1 80433b00b49SSimon Pilgrim %b42 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 42), align 1 80533b00b49SSimon Pilgrim %b43 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 43), align 1 80633b00b49SSimon Pilgrim %b44 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 44), align 1 80733b00b49SSimon Pilgrim %b45 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 45), align 1 80833b00b49SSimon Pilgrim %b46 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 46), align 1 80933b00b49SSimon Pilgrim %b47 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 47), align 1 81033b00b49SSimon Pilgrim %b48 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 48), align 1 81133b00b49SSimon Pilgrim %b49 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 49), align 1 81233b00b49SSimon Pilgrim %b50 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 50), align 1 81333b00b49SSimon Pilgrim %b51 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 51), align 1 81433b00b49SSimon Pilgrim %b52 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 52), align 1 81533b00b49SSimon Pilgrim %b53 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 53), align 1 81633b00b49SSimon Pilgrim %b54 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 54), align 1 81733b00b49SSimon Pilgrim %b55 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 55), align 1 81833b00b49SSimon Pilgrim %b56 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 56), align 1 81933b00b49SSimon Pilgrim %b57 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 57), align 1 82033b00b49SSimon Pilgrim %b58 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 58), align 1 82133b00b49SSimon Pilgrim %b59 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 59), align 1 82233b00b49SSimon Pilgrim %b60 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 60), align 1 82333b00b49SSimon Pilgrim %b61 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 61), align 1 82433b00b49SSimon Pilgrim %b62 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 62), align 1 82533b00b49SSimon Pilgrim %b63 = load i8, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 63), align 1 82633b00b49SSimon Pilgrim %r0 = call i8 @llvm.fshr.i8(i8 %a0 , i8 %a0 , i8 %b0 ) 82733b00b49SSimon Pilgrim %r1 = call i8 @llvm.fshr.i8(i8 %a1 , i8 %a1 , i8 %b1 ) 82833b00b49SSimon Pilgrim %r2 = call i8 @llvm.fshr.i8(i8 %a2 , i8 %a2 , i8 %b2 ) 82933b00b49SSimon Pilgrim %r3 = call i8 @llvm.fshr.i8(i8 %a3 , i8 %a3 , i8 %b3 ) 83033b00b49SSimon Pilgrim %r4 = call i8 @llvm.fshr.i8(i8 %a4 , i8 %a4 , i8 %b4 ) 83133b00b49SSimon Pilgrim %r5 = call i8 @llvm.fshr.i8(i8 %a5 , i8 %a5 , i8 %b5 ) 83233b00b49SSimon Pilgrim %r6 = call i8 @llvm.fshr.i8(i8 %a6 , i8 %a6 , i8 %b6 ) 83333b00b49SSimon Pilgrim %r7 = call i8 @llvm.fshr.i8(i8 %a7 , i8 %a7 , i8 %b7 ) 83433b00b49SSimon Pilgrim %r8 = call i8 @llvm.fshr.i8(i8 %a8 , i8 %a8 , i8 %b8 ) 83533b00b49SSimon Pilgrim %r9 = call i8 @llvm.fshr.i8(i8 %a9 , i8 %a9 , i8 %b9 ) 83633b00b49SSimon Pilgrim %r10 = call i8 @llvm.fshr.i8(i8 %a10, i8 %a10, i8 %b10) 83733b00b49SSimon Pilgrim %r11 = call i8 @llvm.fshr.i8(i8 %a11, i8 %a11, i8 %b11) 83833b00b49SSimon Pilgrim %r12 = call i8 @llvm.fshr.i8(i8 %a12, i8 %a12, i8 %b12) 83933b00b49SSimon Pilgrim %r13 = call i8 @llvm.fshr.i8(i8 %a13, i8 %a13, i8 %b13) 84033b00b49SSimon Pilgrim %r14 = call i8 @llvm.fshr.i8(i8 %a14, i8 %a14, i8 %b14) 84133b00b49SSimon Pilgrim %r15 = call i8 @llvm.fshr.i8(i8 %a15, i8 %a15, i8 %b15) 84233b00b49SSimon Pilgrim %r16 = call i8 @llvm.fshr.i8(i8 %a16, i8 %a16, i8 %b16) 84333b00b49SSimon Pilgrim %r17 = call i8 @llvm.fshr.i8(i8 %a17, i8 %a17, i8 %b17) 84433b00b49SSimon Pilgrim %r18 = call i8 @llvm.fshr.i8(i8 %a18, i8 %a18, i8 %b18) 84533b00b49SSimon Pilgrim %r19 = call i8 @llvm.fshr.i8(i8 %a19, i8 %a19, i8 %b19) 84633b00b49SSimon Pilgrim %r20 = call i8 @llvm.fshr.i8(i8 %a20, i8 %a20, i8 %b20) 84733b00b49SSimon Pilgrim %r21 = call i8 @llvm.fshr.i8(i8 %a21, i8 %a21, i8 %b21) 84833b00b49SSimon Pilgrim %r22 = call i8 @llvm.fshr.i8(i8 %a22, i8 %a22, i8 %b22) 84933b00b49SSimon Pilgrim %r23 = call i8 @llvm.fshr.i8(i8 %a23, i8 %a23, i8 %b23) 85033b00b49SSimon Pilgrim %r24 = call i8 @llvm.fshr.i8(i8 %a24, i8 %a24, i8 %b24) 85133b00b49SSimon Pilgrim %r25 = call i8 @llvm.fshr.i8(i8 %a25, i8 %a25, i8 %b25) 85233b00b49SSimon Pilgrim %r26 = call i8 @llvm.fshr.i8(i8 %a26, i8 %a26, i8 %b26) 85333b00b49SSimon Pilgrim %r27 = call i8 @llvm.fshr.i8(i8 %a27, i8 %a27, i8 %b27) 85433b00b49SSimon Pilgrim %r28 = call i8 @llvm.fshr.i8(i8 %a28, i8 %a28, i8 %b28) 85533b00b49SSimon Pilgrim %r29 = call i8 @llvm.fshr.i8(i8 %a29, i8 %a29, i8 %b29) 85633b00b49SSimon Pilgrim %r30 = call i8 @llvm.fshr.i8(i8 %a30, i8 %a30, i8 %b30) 85733b00b49SSimon Pilgrim %r31 = call i8 @llvm.fshr.i8(i8 %a31, i8 %a31, i8 %b31) 85833b00b49SSimon Pilgrim %r32 = call i8 @llvm.fshr.i8(i8 %a32, i8 %a32, i8 %b32) 85933b00b49SSimon Pilgrim %r33 = call i8 @llvm.fshr.i8(i8 %a33, i8 %a33, i8 %b33) 86033b00b49SSimon Pilgrim %r34 = call i8 @llvm.fshr.i8(i8 %a34, i8 %a34, i8 %b34) 86133b00b49SSimon Pilgrim %r35 = call i8 @llvm.fshr.i8(i8 %a35, i8 %a35, i8 %b35) 86233b00b49SSimon Pilgrim %r36 = call i8 @llvm.fshr.i8(i8 %a36, i8 %a36, i8 %b36) 86333b00b49SSimon Pilgrim %r37 = call i8 @llvm.fshr.i8(i8 %a37, i8 %a37, i8 %b37) 86433b00b49SSimon Pilgrim %r38 = call i8 @llvm.fshr.i8(i8 %a38, i8 %a38, i8 %b38) 86533b00b49SSimon Pilgrim %r39 = call i8 @llvm.fshr.i8(i8 %a39, i8 %a39, i8 %b39) 86633b00b49SSimon Pilgrim %r40 = call i8 @llvm.fshr.i8(i8 %a40, i8 %a40, i8 %b40) 86733b00b49SSimon Pilgrim %r41 = call i8 @llvm.fshr.i8(i8 %a41, i8 %a41, i8 %b41) 86833b00b49SSimon Pilgrim %r42 = call i8 @llvm.fshr.i8(i8 %a42, i8 %a42, i8 %b42) 86933b00b49SSimon Pilgrim %r43 = call i8 @llvm.fshr.i8(i8 %a43, i8 %a43, i8 %b43) 87033b00b49SSimon Pilgrim %r44 = call i8 @llvm.fshr.i8(i8 %a44, i8 %a44, i8 %b44) 87133b00b49SSimon Pilgrim %r45 = call i8 @llvm.fshr.i8(i8 %a45, i8 %a45, i8 %b45) 87233b00b49SSimon Pilgrim %r46 = call i8 @llvm.fshr.i8(i8 %a46, i8 %a46, i8 %b46) 87333b00b49SSimon Pilgrim %r47 = call i8 @llvm.fshr.i8(i8 %a47, i8 %a47, i8 %b47) 87433b00b49SSimon Pilgrim %r48 = call i8 @llvm.fshr.i8(i8 %a48, i8 %a48, i8 %b48) 87533b00b49SSimon Pilgrim %r49 = call i8 @llvm.fshr.i8(i8 %a49, i8 %a49, i8 %b49) 87633b00b49SSimon Pilgrim %r50 = call i8 @llvm.fshr.i8(i8 %a50, i8 %a50, i8 %b50) 87733b00b49SSimon Pilgrim %r51 = call i8 @llvm.fshr.i8(i8 %a51, i8 %a51, i8 %b51) 87833b00b49SSimon Pilgrim %r52 = call i8 @llvm.fshr.i8(i8 %a52, i8 %a52, i8 %b52) 87933b00b49SSimon Pilgrim %r53 = call i8 @llvm.fshr.i8(i8 %a53, i8 %a53, i8 %b53) 88033b00b49SSimon Pilgrim %r54 = call i8 @llvm.fshr.i8(i8 %a54, i8 %a54, i8 %b54) 88133b00b49SSimon Pilgrim %r55 = call i8 @llvm.fshr.i8(i8 %a55, i8 %a55, i8 %b55) 88233b00b49SSimon Pilgrim %r56 = call i8 @llvm.fshr.i8(i8 %a56, i8 %a56, i8 %b56) 88333b00b49SSimon Pilgrim %r57 = call i8 @llvm.fshr.i8(i8 %a57, i8 %a57, i8 %b57) 88433b00b49SSimon Pilgrim %r58 = call i8 @llvm.fshr.i8(i8 %a58, i8 %a58, i8 %b58) 88533b00b49SSimon Pilgrim %r59 = call i8 @llvm.fshr.i8(i8 %a59, i8 %a59, i8 %b59) 88633b00b49SSimon Pilgrim %r60 = call i8 @llvm.fshr.i8(i8 %a60, i8 %a60, i8 %b60) 88733b00b49SSimon Pilgrim %r61 = call i8 @llvm.fshr.i8(i8 %a61, i8 %a61, i8 %b61) 88833b00b49SSimon Pilgrim %r62 = call i8 @llvm.fshr.i8(i8 %a62, i8 %a62, i8 %b62) 88933b00b49SSimon Pilgrim %r63 = call i8 @llvm.fshr.i8(i8 %a63, i8 %a63, i8 %b63) 89033b00b49SSimon Pilgrim store i8 %r0 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 0 ), align 1 89133b00b49SSimon Pilgrim store i8 %r1 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 1 ), align 1 89233b00b49SSimon Pilgrim store i8 %r2 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 2 ), align 1 89333b00b49SSimon Pilgrim store i8 %r3 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 3 ), align 1 89433b00b49SSimon Pilgrim store i8 %r4 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 4 ), align 1 89533b00b49SSimon Pilgrim store i8 %r5 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 5 ), align 1 89633b00b49SSimon Pilgrim store i8 %r6 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 6 ), align 1 89733b00b49SSimon Pilgrim store i8 %r7 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 7 ), align 1 89833b00b49SSimon Pilgrim store i8 %r8 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 8 ), align 1 89933b00b49SSimon Pilgrim store i8 %r9 , ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 9 ), align 1 90033b00b49SSimon Pilgrim store i8 %r10, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 10), align 1 90133b00b49SSimon Pilgrim store i8 %r11, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 11), align 1 90233b00b49SSimon Pilgrim store i8 %r12, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 12), align 1 90333b00b49SSimon Pilgrim store i8 %r13, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 13), align 1 90433b00b49SSimon Pilgrim store i8 %r14, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 14), align 1 90533b00b49SSimon Pilgrim store i8 %r15, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 15), align 1 90633b00b49SSimon Pilgrim store i8 %r16, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 16), align 1 90733b00b49SSimon Pilgrim store i8 %r17, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 17), align 1 90833b00b49SSimon Pilgrim store i8 %r18, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 18), align 1 90933b00b49SSimon Pilgrim store i8 %r19, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 19), align 1 91033b00b49SSimon Pilgrim store i8 %r20, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 20), align 1 91133b00b49SSimon Pilgrim store i8 %r21, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 21), align 1 91233b00b49SSimon Pilgrim store i8 %r22, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 22), align 1 91333b00b49SSimon Pilgrim store i8 %r23, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 23), align 1 91433b00b49SSimon Pilgrim store i8 %r24, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 24), align 1 91533b00b49SSimon Pilgrim store i8 %r25, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 25), align 1 91633b00b49SSimon Pilgrim store i8 %r26, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 26), align 1 91733b00b49SSimon Pilgrim store i8 %r27, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 27), align 1 91833b00b49SSimon Pilgrim store i8 %r28, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 28), align 1 91933b00b49SSimon Pilgrim store i8 %r29, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 29), align 1 92033b00b49SSimon Pilgrim store i8 %r30, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 30), align 1 92133b00b49SSimon Pilgrim store i8 %r31, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 31), align 1 92233b00b49SSimon Pilgrim store i8 %r32, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 32), align 1 92333b00b49SSimon Pilgrim store i8 %r33, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 33), align 1 92433b00b49SSimon Pilgrim store i8 %r34, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 34), align 1 92533b00b49SSimon Pilgrim store i8 %r35, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 35), align 1 92633b00b49SSimon Pilgrim store i8 %r36, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 36), align 1 92733b00b49SSimon Pilgrim store i8 %r37, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 37), align 1 92833b00b49SSimon Pilgrim store i8 %r38, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 38), align 1 92933b00b49SSimon Pilgrim store i8 %r39, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 39), align 1 93033b00b49SSimon Pilgrim store i8 %r40, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 40), align 1 93133b00b49SSimon Pilgrim store i8 %r41, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 41), align 1 93233b00b49SSimon Pilgrim store i8 %r42, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 42), align 1 93333b00b49SSimon Pilgrim store i8 %r43, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 43), align 1 93433b00b49SSimon Pilgrim store i8 %r44, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 44), align 1 93533b00b49SSimon Pilgrim store i8 %r45, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 45), align 1 93633b00b49SSimon Pilgrim store i8 %r46, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 46), align 1 93733b00b49SSimon Pilgrim store i8 %r47, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 47), align 1 93833b00b49SSimon Pilgrim store i8 %r48, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 48), align 1 93933b00b49SSimon Pilgrim store i8 %r49, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 49), align 1 94033b00b49SSimon Pilgrim store i8 %r50, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 50), align 1 94133b00b49SSimon Pilgrim store i8 %r51, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 51), align 1 94233b00b49SSimon Pilgrim store i8 %r52, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 52), align 1 94333b00b49SSimon Pilgrim store i8 %r53, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 53), align 1 94433b00b49SSimon Pilgrim store i8 %r54, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 54), align 1 94533b00b49SSimon Pilgrim store i8 %r55, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 55), align 1 94633b00b49SSimon Pilgrim store i8 %r56, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 56), align 1 94733b00b49SSimon Pilgrim store i8 %r57, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 57), align 1 94833b00b49SSimon Pilgrim store i8 %r58, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 58), align 1 94933b00b49SSimon Pilgrim store i8 %r59, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 59), align 1 95033b00b49SSimon Pilgrim store i8 %r60, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 60), align 1 95133b00b49SSimon Pilgrim store i8 %r61, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 61), align 1 95233b00b49SSimon Pilgrim store i8 %r62, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 62), align 1 95333b00b49SSimon Pilgrim store i8 %r63, ptr getelementptr inbounds ([64 x i8], ptr @d8, i32 0, i64 63), align 1 95433b00b49SSimon Pilgrim ret void 95533b00b49SSimon Pilgrim} 95633b00b49SSimon Pilgrim 95733b00b49SSimon Pilgrimdefine void @fshr_v2i32() { 958*a12d7e4bSSimon Pilgrim; CHECK-LABEL: @fshr_v2i32( 959*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[A0:%.*]] = load i32, ptr @a32, align 4 960*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[A1:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1), align 4 961*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[B0:%.*]] = load i32, ptr @b32, align 4 962*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[B1:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 1), align 4 963*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[R0:%.*]] = call i32 @llvm.fshr.i32(i32 [[A0]], i32 [[A0]], i32 [[B0]]) 964*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[R1:%.*]] = call i32 @llvm.fshr.i32(i32 [[A1]], i32 [[A1]], i32 [[B1]]) 965*a12d7e4bSSimon Pilgrim; CHECK-NEXT: store i32 [[R0]], ptr @d32, align 4 966*a12d7e4bSSimon Pilgrim; CHECK-NEXT: store i32 [[R1]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 1), align 4 967*a12d7e4bSSimon Pilgrim; CHECK-NEXT: ret void 96833b00b49SSimon Pilgrim; 96977465967SSimon Pilgrim; AVX512VBMI2-LABEL: @fshr_v2i32( 97077465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr @a32, align 4 97177465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr @b32, align 4 97277465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP3:%.*]] = call <2 x i32> @llvm.fshr.v2i32(<2 x i32> [[TMP1]], <2 x i32> [[TMP1]], <2 x i32> [[TMP2]]) 97377465967SSimon Pilgrim; AVX512VBMI2-NEXT: store <2 x i32> [[TMP3]], ptr @d32, align 4 97477465967SSimon Pilgrim; AVX512VBMI2-NEXT: ret void 97577465967SSimon Pilgrim; 97633b00b49SSimon Pilgrim %a0 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 0 ), align 4 97733b00b49SSimon Pilgrim %a1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1 ), align 4 97833b00b49SSimon Pilgrim %b0 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 0 ), align 4 97933b00b49SSimon Pilgrim %b1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 1 ), align 4 98033b00b49SSimon Pilgrim %r0 = call i32 @llvm.fshr.i32(i32 %a0 , i32 %a0 , i32 %b0 ) 98133b00b49SSimon Pilgrim %r1 = call i32 @llvm.fshr.i32(i32 %a1 , i32 %a1 , i32 %b1 ) 98233b00b49SSimon Pilgrim store i32 %r0 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 0 ), align 4 98333b00b49SSimon Pilgrim store i32 %r1 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 1 ), align 4 98433b00b49SSimon Pilgrim ret void 98533b00b49SSimon Pilgrim} 98633b00b49SSimon Pilgrim 98733b00b49SSimon Pilgrim; PR63980 98833b00b49SSimon Pilgrimdefine void @fshr_v2i32_uniformconst() { 989*a12d7e4bSSimon Pilgrim; CHECK-LABEL: @fshr_v2i32_uniformconst( 990*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[A0:%.*]] = load i32, ptr @a32, align 4 991*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[A1:%.*]] = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1), align 4 992*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[R0:%.*]] = call i32 @llvm.fshr.i32(i32 [[A0]], i32 [[A0]], i32 1) 993*a12d7e4bSSimon Pilgrim; CHECK-NEXT: [[R1:%.*]] = call i32 @llvm.fshr.i32(i32 [[A1]], i32 [[A1]], i32 1) 994*a12d7e4bSSimon Pilgrim; CHECK-NEXT: store i32 [[R0]], ptr @d32, align 4 995*a12d7e4bSSimon Pilgrim; CHECK-NEXT: store i32 [[R1]], ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 1), align 4 996*a12d7e4bSSimon Pilgrim; CHECK-NEXT: ret void 99733b00b49SSimon Pilgrim; 99877465967SSimon Pilgrim; AVX512VBMI2-LABEL: @fshr_v2i32_uniformconst( 99977465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr @a32, align 4 100077465967SSimon Pilgrim; AVX512VBMI2-NEXT: [[TMP2:%.*]] = call <2 x i32> @llvm.fshr.v2i32(<2 x i32> [[TMP1]], <2 x i32> [[TMP1]], <2 x i32> splat (i32 1)) 100177465967SSimon Pilgrim; AVX512VBMI2-NEXT: store <2 x i32> [[TMP2]], ptr @d32, align 4 100277465967SSimon Pilgrim; AVX512VBMI2-NEXT: ret void 100377465967SSimon Pilgrim; 100433b00b49SSimon Pilgrim %a0 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 0 ), align 4 100533b00b49SSimon Pilgrim %a1 = load i32, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 1 ), align 4 100633b00b49SSimon Pilgrim %r0 = call i32 @llvm.fshr.i32(i32 %a0 , i32 %a0 , i32 1 ) 100733b00b49SSimon Pilgrim %r1 = call i32 @llvm.fshr.i32(i32 %a1 , i32 %a1 , i32 1 ) 100833b00b49SSimon Pilgrim store i32 %r0 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 0 ), align 4 100933b00b49SSimon Pilgrim store i32 %r1 , ptr getelementptr inbounds ([16 x i32], ptr @d32, i32 0, i64 1 ), align 4 101033b00b49SSimon Pilgrim ret void 101133b00b49SSimon Pilgrim} 1012