brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.5 KiB · 8311e75 Raw
436 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=SSE3; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX4; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX5; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=bdver2 -passes=slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=XOP6; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=bdver4 -passes=slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=XOP7 8target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"9 10@src64 = common global [4 x i64] zeroinitializer, align 3211@dst64 = common global [4 x i64] zeroinitializer, align 3212@src32 = common global [8 x i32] zeroinitializer, align 3213@dst32 = common global [8 x i32] zeroinitializer, align 3214@src16 = common global [16 x i16] zeroinitializer, align 3215@dst16 = common global [16 x i16] zeroinitializer, align 3216@src8  = common global [32 x i8] zeroinitializer, align 3217@dst8  = common global [32 x i8] zeroinitializer, align 3218 19declare i64 @llvm.bitreverse.i64(i64)20declare i32 @llvm.bitreverse.i32(i32)21declare i16 @llvm.bitreverse.i16(i16)22declare  i8 @llvm.bitreverse.i8(i8)23 24define void @bitreverse_2i64() #0 {25; CHECK-LABEL: @bitreverse_2i64(26; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 827; CHECK-NEXT:    [[TMP2:%.*]] = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> [[TMP1]])28; CHECK-NEXT:    store <2 x i64> [[TMP2]], ptr @dst64, align 829; CHECK-NEXT:    ret void30;31  %ld0 = load i64, ptr @src64, align 832  %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 833  %bitreverse0 = call i64 @llvm.bitreverse.i64(i64 %ld0)34  %bitreverse1 = call i64 @llvm.bitreverse.i64(i64 %ld1)35  store i64 %bitreverse0, ptr @dst64, align 836  store i64 %bitreverse1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 837  ret void38}39 40define void @bitreverse_4i64() #0 {41; SSE-LABEL: @bitreverse_4i64(42; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 443; SSE-NEXT:    [[TMP2:%.*]] = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> [[TMP1]])44; SSE-NEXT:    store <2 x i64> [[TMP2]], ptr @dst64, align 445; SSE-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 446; SSE-NEXT:    [[TMP4:%.*]] = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> [[TMP3]])47; SSE-NEXT:    store <2 x i64> [[TMP4]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 448; SSE-NEXT:    ret void49;50; AVX-LABEL: @bitreverse_4i64(51; AVX-NEXT:    [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 452; AVX-NEXT:    [[TMP2:%.*]] = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> [[TMP1]])53; AVX-NEXT:    store <4 x i64> [[TMP2]], ptr @dst64, align 454; AVX-NEXT:    ret void55;56; XOP-LABEL: @bitreverse_4i64(57; XOP-NEXT:    [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 458; XOP-NEXT:    [[TMP2:%.*]] = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> [[TMP1]])59; XOP-NEXT:    store <4 x i64> [[TMP2]], ptr @dst64, align 460; XOP-NEXT:    ret void61;62  %ld0 = load i64, ptr @src64, align 463  %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 464  %ld2 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 465  %ld3 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 466  %bitreverse0 = call i64 @llvm.bitreverse.i64(i64 %ld0)67  %bitreverse1 = call i64 @llvm.bitreverse.i64(i64 %ld1)68  %bitreverse2 = call i64 @llvm.bitreverse.i64(i64 %ld2)69  %bitreverse3 = call i64 @llvm.bitreverse.i64(i64 %ld3)70  store i64 %bitreverse0, ptr @dst64, align 471  store i64 %bitreverse1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 472  store i64 %bitreverse2, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 473  store i64 %bitreverse3, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 474  ret void75}76 77define void @bitreverse_4i32() #0 {78; CHECK-LABEL: @bitreverse_4i32(79; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 480; CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> [[TMP1]])81; CHECK-NEXT:    store <4 x i32> [[TMP2]], ptr @dst32, align 482; CHECK-NEXT:    ret void83;84  %ld0 = load i32, ptr @src32, align 485  %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 486  %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 487  %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 488  %bitreverse0 = call i32 @llvm.bitreverse.i32(i32 %ld0)89  %bitreverse1 = call i32 @llvm.bitreverse.i32(i32 %ld1)90  %bitreverse2 = call i32 @llvm.bitreverse.i32(i32 %ld2)91  %bitreverse3 = call i32 @llvm.bitreverse.i32(i32 %ld3)92  store i32 %bitreverse0, ptr @dst32, align 493  store i32 %bitreverse1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 494  store i32 %bitreverse2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 495  store i32 %bitreverse3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 496  ret void97}98 99define void @bitreverse_8i32() #0 {100; SSE-LABEL: @bitreverse_8i32(101; SSE-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 2102; SSE-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> [[TMP1]])103; SSE-NEXT:    store <4 x i32> [[TMP2]], ptr @dst32, align 2104; SSE-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2105; SSE-NEXT:    [[TMP4:%.*]] = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> [[TMP3]])106; SSE-NEXT:    store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2107; SSE-NEXT:    ret void108;109; AVX-LABEL: @bitreverse_8i32(110; AVX-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2111; AVX-NEXT:    [[TMP2:%.*]] = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> [[TMP1]])112; AVX-NEXT:    store <8 x i32> [[TMP2]], ptr @dst32, align 2113; AVX-NEXT:    ret void114;115; XOP-LABEL: @bitreverse_8i32(116; XOP-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2117; XOP-NEXT:    [[TMP2:%.*]] = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> [[TMP1]])118; XOP-NEXT:    store <8 x i32> [[TMP2]], ptr @dst32, align 2119; XOP-NEXT:    ret void120;121  %ld0 = load i32, ptr @src32, align 2122  %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2123  %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2124  %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2125  %ld4 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2126  %ld5 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2127  %ld6 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2128  %ld7 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2129  %bitreverse0 = call i32 @llvm.bitreverse.i32(i32 %ld0)130  %bitreverse1 = call i32 @llvm.bitreverse.i32(i32 %ld1)131  %bitreverse2 = call i32 @llvm.bitreverse.i32(i32 %ld2)132  %bitreverse3 = call i32 @llvm.bitreverse.i32(i32 %ld3)133  %bitreverse4 = call i32 @llvm.bitreverse.i32(i32 %ld4)134  %bitreverse5 = call i32 @llvm.bitreverse.i32(i32 %ld5)135  %bitreverse6 = call i32 @llvm.bitreverse.i32(i32 %ld6)136  %bitreverse7 = call i32 @llvm.bitreverse.i32(i32 %ld7)137  store i32 %bitreverse0, ptr @dst32, align 2138  store i32 %bitreverse1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2139  store i32 %bitreverse2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2140  store i32 %bitreverse3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2141  store i32 %bitreverse4, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2142  store i32 %bitreverse5, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2143  store i32 %bitreverse6, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2144  store i32 %bitreverse7, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2145  ret void146}147 148define void @bitreverse_8i16() #0 {149; CHECK-LABEL: @bitreverse_8i16(150; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2151; CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> [[TMP1]])152; CHECK-NEXT:    store <8 x i16> [[TMP2]], ptr @dst16, align 2153; CHECK-NEXT:    ret void154;155  %ld0 = load i16, ptr @src16, align 2156  %ld1 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 1), align 2157  %ld2 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 2), align 2158  %ld3 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 3), align 2159  %ld4 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 4), align 2160  %ld5 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 5), align 2161  %ld6 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 6), align 2162  %ld7 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 7), align 2163  %bitreverse0 = call i16 @llvm.bitreverse.i16(i16 %ld0)164  %bitreverse1 = call i16 @llvm.bitreverse.i16(i16 %ld1)165  %bitreverse2 = call i16 @llvm.bitreverse.i16(i16 %ld2)166  %bitreverse3 = call i16 @llvm.bitreverse.i16(i16 %ld3)167  %bitreverse4 = call i16 @llvm.bitreverse.i16(i16 %ld4)168  %bitreverse5 = call i16 @llvm.bitreverse.i16(i16 %ld5)169  %bitreverse6 = call i16 @llvm.bitreverse.i16(i16 %ld6)170  %bitreverse7 = call i16 @llvm.bitreverse.i16(i16 %ld7)171  store i16 %bitreverse0, ptr @dst16, align 2172  store i16 %bitreverse1, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 1), align 2173  store i16 %bitreverse2, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 2), align 2174  store i16 %bitreverse3, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 3), align 2175  store i16 %bitreverse4, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 4), align 2176  store i16 %bitreverse5, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 5), align 2177  store i16 %bitreverse6, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 6), align 2178  store i16 %bitreverse7, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 7), align 2179  ret void180}181 182define void @bitreverse_16i16() #0 {183; SSE-LABEL: @bitreverse_16i16(184; SSE-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2185; SSE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> [[TMP1]])186; SSE-NEXT:    store <8 x i16> [[TMP2]], ptr @dst16, align 2187; SSE-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 8), align 2188; SSE-NEXT:    [[TMP4:%.*]] = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> [[TMP3]])189; SSE-NEXT:    store <8 x i16> [[TMP4]], ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 8), align 2190; SSE-NEXT:    ret void191;192; AVX-LABEL: @bitreverse_16i16(193; AVX-NEXT:    [[TMP1:%.*]] = load <16 x i16>, ptr @src16, align 2194; AVX-NEXT:    [[TMP2:%.*]] = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> [[TMP1]])195; AVX-NEXT:    store <16 x i16> [[TMP2]], ptr @dst16, align 2196; AVX-NEXT:    ret void197;198; XOP-LABEL: @bitreverse_16i16(199; XOP-NEXT:    [[TMP1:%.*]] = load <16 x i16>, ptr @src16, align 2200; XOP-NEXT:    [[TMP2:%.*]] = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> [[TMP1]])201; XOP-NEXT:    store <16 x i16> [[TMP2]], ptr @dst16, align 2202; XOP-NEXT:    ret void203;204  %ld0  = load i16, ptr @src16, align 2205  %ld1  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  1), align 2206  %ld2  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  2), align 2207  %ld3  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  3), align 2208  %ld4  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  4), align 2209  %ld5  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  5), align 2210  %ld6  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  6), align 2211  %ld7  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  7), align 2212  %ld8  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  8), align 2213  %ld9  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  9), align 2214  %ld10 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 10), align 2215  %ld11 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 11), align 2216  %ld12 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 12), align 2217  %ld13 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 13), align 2218  %ld14 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 14), align 2219  %ld15 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 15), align 2220  %bitreverse0  = call i16 @llvm.bitreverse.i16(i16 %ld0)221  %bitreverse1  = call i16 @llvm.bitreverse.i16(i16 %ld1)222  %bitreverse2  = call i16 @llvm.bitreverse.i16(i16 %ld2)223  %bitreverse3  = call i16 @llvm.bitreverse.i16(i16 %ld3)224  %bitreverse4  = call i16 @llvm.bitreverse.i16(i16 %ld4)225  %bitreverse5  = call i16 @llvm.bitreverse.i16(i16 %ld5)226  %bitreverse6  = call i16 @llvm.bitreverse.i16(i16 %ld6)227  %bitreverse7  = call i16 @llvm.bitreverse.i16(i16 %ld7)228  %bitreverse8  = call i16 @llvm.bitreverse.i16(i16 %ld8)229  %bitreverse9  = call i16 @llvm.bitreverse.i16(i16 %ld9)230  %bitreverse10 = call i16 @llvm.bitreverse.i16(i16 %ld10)231  %bitreverse11 = call i16 @llvm.bitreverse.i16(i16 %ld11)232  %bitreverse12 = call i16 @llvm.bitreverse.i16(i16 %ld12)233  %bitreverse13 = call i16 @llvm.bitreverse.i16(i16 %ld13)234  %bitreverse14 = call i16 @llvm.bitreverse.i16(i16 %ld14)235  %bitreverse15 = call i16 @llvm.bitreverse.i16(i16 %ld15)236  store i16 %bitreverse0 , ptr @dst16, align 2237  store i16 %bitreverse1 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  1), align 2238  store i16 %bitreverse2 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  2), align 2239  store i16 %bitreverse3 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  3), align 2240  store i16 %bitreverse4 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  4), align 2241  store i16 %bitreverse5 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  5), align 2242  store i16 %bitreverse6 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  6), align 2243  store i16 %bitreverse7 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  7), align 2244  store i16 %bitreverse8 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  8), align 2245  store i16 %bitreverse9 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  9), align 2246  store i16 %bitreverse10, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 10), align 2247  store i16 %bitreverse11, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 11), align 2248  store i16 %bitreverse12, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 12), align 2249  store i16 %bitreverse13, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 13), align 2250  store i16 %bitreverse14, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 14), align 2251  store i16 %bitreverse15, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 15), align 2252  ret void253}254 255define void @bitreverse_16i8() #0 {256; CHECK-LABEL: @bitreverse_16i8(257; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1258; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> [[TMP1]])259; CHECK-NEXT:    store <16 x i8> [[TMP2]], ptr @dst8, align 1260; CHECK-NEXT:    ret void261;262  %ld0  = load i8, ptr @src8, align 1263  %ld1  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  1), align 1264  %ld2  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  2), align 1265  %ld3  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  3), align 1266  %ld4  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  4), align 1267  %ld5  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  5), align 1268  %ld6  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  6), align 1269  %ld7  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  7), align 1270  %ld8  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  8), align 1271  %ld9  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  9), align 1272  %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1273  %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1274  %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1275  %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1276  %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1277  %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1278  %bitreverse0  = call i8 @llvm.bitreverse.i8(i8 %ld0)279  %bitreverse1  = call i8 @llvm.bitreverse.i8(i8 %ld1)280  %bitreverse2  = call i8 @llvm.bitreverse.i8(i8 %ld2)281  %bitreverse3  = call i8 @llvm.bitreverse.i8(i8 %ld3)282  %bitreverse4  = call i8 @llvm.bitreverse.i8(i8 %ld4)283  %bitreverse5  = call i8 @llvm.bitreverse.i8(i8 %ld5)284  %bitreverse6  = call i8 @llvm.bitreverse.i8(i8 %ld6)285  %bitreverse7  = call i8 @llvm.bitreverse.i8(i8 %ld7)286  %bitreverse8  = call i8 @llvm.bitreverse.i8(i8 %ld8)287  %bitreverse9  = call i8 @llvm.bitreverse.i8(i8 %ld9)288  %bitreverse10 = call i8 @llvm.bitreverse.i8(i8 %ld10)289  %bitreverse11 = call i8 @llvm.bitreverse.i8(i8 %ld11)290  %bitreverse12 = call i8 @llvm.bitreverse.i8(i8 %ld12)291  %bitreverse13 = call i8 @llvm.bitreverse.i8(i8 %ld13)292  %bitreverse14 = call i8 @llvm.bitreverse.i8(i8 %ld14)293  %bitreverse15 = call i8 @llvm.bitreverse.i8(i8 %ld15)294  store i8 %bitreverse0 , ptr @dst8, align 1295  store i8 %bitreverse1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  1), align 1296  store i8 %bitreverse2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  2), align 1297  store i8 %bitreverse3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  3), align 1298  store i8 %bitreverse4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  4), align 1299  store i8 %bitreverse5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  5), align 1300  store i8 %bitreverse6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  6), align 1301  store i8 %bitreverse7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  7), align 1302  store i8 %bitreverse8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  8), align 1303  store i8 %bitreverse9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  9), align 1304  store i8 %bitreverse10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1305  store i8 %bitreverse11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1306  store i8 %bitreverse12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1307  store i8 %bitreverse13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1308  store i8 %bitreverse14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1309  store i8 %bitreverse15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1310  ret void311}312 313define void @bitreverse_32i8() #0 {314; SSE-LABEL: @bitreverse_32i8(315; SSE-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1316; SSE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> [[TMP1]])317; SSE-NEXT:    store <16 x i8> [[TMP2]], ptr @dst8, align 1318; SSE-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1319; SSE-NEXT:    [[TMP4:%.*]] = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> [[TMP3]])320; SSE-NEXT:    store <16 x i8> [[TMP4]], ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1321; SSE-NEXT:    ret void322;323; AVX-LABEL: @bitreverse_32i8(324; AVX-NEXT:    [[TMP1:%.*]] = load <32 x i8>, ptr @src8, align 1325; AVX-NEXT:    [[TMP2:%.*]] = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> [[TMP1]])326; AVX-NEXT:    store <32 x i8> [[TMP2]], ptr @dst8, align 1327; AVX-NEXT:    ret void328;329; XOP-LABEL: @bitreverse_32i8(330; XOP-NEXT:    [[TMP1:%.*]] = load <32 x i8>, ptr @src8, align 1331; XOP-NEXT:    [[TMP2:%.*]] = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> [[TMP1]])332; XOP-NEXT:    store <32 x i8> [[TMP2]], ptr @dst8, align 1333; XOP-NEXT:    ret void334;335  %ld0  = load i8, ptr @src8, align 1336  %ld1  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  1), align 1337  %ld2  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  2), align 1338  %ld3  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  3), align 1339  %ld4  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  4), align 1340  %ld5  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  5), align 1341  %ld6  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  6), align 1342  %ld7  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  7), align 1343  %ld8  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  8), align 1344  %ld9  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  9), align 1345  %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1346  %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1347  %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1348  %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1349  %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1350  %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1351  %ld16 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1352  %ld17 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 17), align 1353  %ld18 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 18), align 1354  %ld19 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 19), align 1355  %ld20 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 20), align 1356  %ld21 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 21), align 1357  %ld22 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 22), align 1358  %ld23 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 23), align 1359  %ld24 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 24), align 1360  %ld25 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 25), align 1361  %ld26 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 26), align 1362  %ld27 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 27), align 1363  %ld28 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 28), align 1364  %ld29 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 29), align 1365  %ld30 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 30), align 1366  %ld31 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 31), align 1367  %bitreverse0  = call i8 @llvm.bitreverse.i8(i8 %ld0)368  %bitreverse1  = call i8 @llvm.bitreverse.i8(i8 %ld1)369  %bitreverse2  = call i8 @llvm.bitreverse.i8(i8 %ld2)370  %bitreverse3  = call i8 @llvm.bitreverse.i8(i8 %ld3)371  %bitreverse4  = call i8 @llvm.bitreverse.i8(i8 %ld4)372  %bitreverse5  = call i8 @llvm.bitreverse.i8(i8 %ld5)373  %bitreverse6  = call i8 @llvm.bitreverse.i8(i8 %ld6)374  %bitreverse7  = call i8 @llvm.bitreverse.i8(i8 %ld7)375  %bitreverse8  = call i8 @llvm.bitreverse.i8(i8 %ld8)376  %bitreverse9  = call i8 @llvm.bitreverse.i8(i8 %ld9)377  %bitreverse10 = call i8 @llvm.bitreverse.i8(i8 %ld10)378  %bitreverse11 = call i8 @llvm.bitreverse.i8(i8 %ld11)379  %bitreverse12 = call i8 @llvm.bitreverse.i8(i8 %ld12)380  %bitreverse13 = call i8 @llvm.bitreverse.i8(i8 %ld13)381  %bitreverse14 = call i8 @llvm.bitreverse.i8(i8 %ld14)382  %bitreverse15 = call i8 @llvm.bitreverse.i8(i8 %ld15)383  %bitreverse16 = call i8 @llvm.bitreverse.i8(i8 %ld16)384  %bitreverse17 = call i8 @llvm.bitreverse.i8(i8 %ld17)385  %bitreverse18 = call i8 @llvm.bitreverse.i8(i8 %ld18)386  %bitreverse19 = call i8 @llvm.bitreverse.i8(i8 %ld19)387  %bitreverse20 = call i8 @llvm.bitreverse.i8(i8 %ld20)388  %bitreverse21 = call i8 @llvm.bitreverse.i8(i8 %ld21)389  %bitreverse22 = call i8 @llvm.bitreverse.i8(i8 %ld22)390  %bitreverse23 = call i8 @llvm.bitreverse.i8(i8 %ld23)391  %bitreverse24 = call i8 @llvm.bitreverse.i8(i8 %ld24)392  %bitreverse25 = call i8 @llvm.bitreverse.i8(i8 %ld25)393  %bitreverse26 = call i8 @llvm.bitreverse.i8(i8 %ld26)394  %bitreverse27 = call i8 @llvm.bitreverse.i8(i8 %ld27)395  %bitreverse28 = call i8 @llvm.bitreverse.i8(i8 %ld28)396  %bitreverse29 = call i8 @llvm.bitreverse.i8(i8 %ld29)397  %bitreverse30 = call i8 @llvm.bitreverse.i8(i8 %ld30)398  %bitreverse31 = call i8 @llvm.bitreverse.i8(i8 %ld31)399  store i8 %bitreverse0 , ptr @dst8, align 1400  store i8 %bitreverse1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  1), align 1401  store i8 %bitreverse2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  2), align 1402  store i8 %bitreverse3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  3), align 1403  store i8 %bitreverse4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  4), align 1404  store i8 %bitreverse5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  5), align 1405  store i8 %bitreverse6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  6), align 1406  store i8 %bitreverse7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  7), align 1407  store i8 %bitreverse8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  8), align 1408  store i8 %bitreverse9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  9), align 1409  store i8 %bitreverse10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1410  store i8 %bitreverse11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1411  store i8 %bitreverse12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1412  store i8 %bitreverse13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1413  store i8 %bitreverse14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1414  store i8 %bitreverse15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1415  store i8 %bitreverse16, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1416  store i8 %bitreverse17, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 17), align 1417  store i8 %bitreverse18, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 18), align 1418  store i8 %bitreverse19, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 19), align 1419  store i8 %bitreverse20, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 20), align 1420  store i8 %bitreverse21, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 21), align 1421  store i8 %bitreverse22, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 22), align 1422  store i8 %bitreverse23, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 23), align 1423  store i8 %bitreverse24, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 24), align 1424  store i8 %bitreverse25, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 25), align 1425  store i8 %bitreverse26, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 26), align 1426  store i8 %bitreverse27, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 27), align 1427  store i8 %bitreverse28, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 28), align 1428  store i8 %bitreverse29, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 29), align 1429  store i8 %bitreverse30, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 30), align 1430  store i8 %bitreverse31, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 31), align 1431  ret void432}433 434attributes #0 = { nounwind }435 436