blob: 6f2d96a1291f6dd6e4172669791def365a62f264 [file]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -mtriple=wasm32 -mattr=+simd128 -passes=loop-vectorize -S %s -o - | FileCheck %s
define dso_local void @fill_block_with_xor(ptr %arg) {
; CHECK-LABEL: define dso_local void @fill_block_with_xor(
; CHECK-SAME: ptr [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: [[NEWFUNCROOT:.*:]]
; CHECK-NEXT: br label %[[VECTOR_PH:.*]]
; CHECK: [[VECTOR_PH]]:
; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
; CHECK: [[VECTOR_BODY]]:
; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
; CHECK-NEXT: [[TMP0:%.*]] = shl nuw nsw i32 [[INDEX]], 4
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[ARG]], i32 [[TMP0]]
; CHECK-NEXT: [[WIDE_VEC:%.*]] = load <4 x i64>, ptr [[TMP1]], align 8
; CHECK-NEXT: [[STRIDED_VEC:%.*]] = shufflevector <4 x i64> [[WIDE_VEC]], <4 x i64> poison, <2 x i32> <i32 0, i32 2>
; CHECK-NEXT: [[STRIDED_VEC1:%.*]] = shufflevector <4 x i64> [[WIDE_VEC]], <4 x i64> poison, <2 x i32> <i32 1, i32 3>
; CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[TMP1]], i32 256
; CHECK-NEXT: [[WIDE_VEC2:%.*]] = load <4 x i64>, ptr [[TMP2]], align 8
; CHECK-NEXT: [[STRIDED_VEC3:%.*]] = shufflevector <4 x i64> [[WIDE_VEC2]], <4 x i64> poison, <2 x i32> <i32 0, i32 2>
; CHECK-NEXT: [[STRIDED_VEC4:%.*]] = shufflevector <4 x i64> [[WIDE_VEC2]], <4 x i64> poison, <2 x i32> <i32 1, i32 3>
; CHECK-NEXT: [[TMP3:%.*]] = and <2 x i64> [[STRIDED_VEC3]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP4:%.*]] = add <2 x i64> [[STRIDED_VEC3]], [[STRIDED_VEC]]
; CHECK-NEXT: [[TMP5:%.*]] = shl <2 x i64> [[STRIDED_VEC]], splat (i64 1)
; CHECK-NEXT: [[TMP6:%.*]] = and <2 x i64> [[TMP5]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP7:%.*]] = mul <2 x i64> [[TMP6]], [[TMP3]]
; CHECK-NEXT: [[TMP8:%.*]] = add <2 x i64> [[TMP4]], [[TMP7]]
; CHECK-NEXT: [[TMP9:%.*]] = getelementptr i8, ptr [[TMP1]], i32 768
; CHECK-NEXT: [[WIDE_VEC5:%.*]] = load <4 x i64>, ptr [[TMP9]], align 8
; CHECK-NEXT: [[STRIDED_VEC6:%.*]] = shufflevector <4 x i64> [[WIDE_VEC5]], <4 x i64> poison, <2 x i32> <i32 0, i32 2>
; CHECK-NEXT: [[STRIDED_VEC7:%.*]] = shufflevector <4 x i64> [[WIDE_VEC5]], <4 x i64> poison, <2 x i32> <i32 1, i32 3>
; CHECK-NEXT: [[TMP10:%.*]] = xor <2 x i64> [[TMP8]], [[STRIDED_VEC6]]
; CHECK-NEXT: [[TMP11:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP10]], <2 x i64> [[TMP10]], <2 x i64> splat (i64 32))
; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[TMP1]], i32 512
; CHECK-NEXT: [[WIDE_VEC8:%.*]] = load <4 x i64>, ptr [[TMP12]], align 8
; CHECK-NEXT: [[STRIDED_VEC9:%.*]] = shufflevector <4 x i64> [[WIDE_VEC8]], <4 x i64> poison, <2 x i32> <i32 0, i32 2>
; CHECK-NEXT: [[STRIDED_VEC10:%.*]] = shufflevector <4 x i64> [[WIDE_VEC8]], <4 x i64> poison, <2 x i32> <i32 1, i32 3>
; CHECK-NEXT: [[TMP13:%.*]] = and <2 x i64> [[TMP11]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP14:%.*]] = add <2 x i64> [[TMP11]], [[STRIDED_VEC9]]
; CHECK-NEXT: [[TMP15:%.*]] = shl <2 x i64> [[STRIDED_VEC9]], splat (i64 1)
; CHECK-NEXT: [[TMP16:%.*]] = and <2 x i64> [[TMP15]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP17:%.*]] = mul <2 x i64> [[TMP16]], [[TMP13]]
; CHECK-NEXT: [[TMP18:%.*]] = add <2 x i64> [[TMP14]], [[TMP17]]
; CHECK-NEXT: [[TMP19:%.*]] = xor <2 x i64> [[TMP18]], [[STRIDED_VEC3]]
; CHECK-NEXT: [[TMP20:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP19]], <2 x i64> [[TMP19]], <2 x i64> splat (i64 40))
; CHECK-NEXT: [[TMP21:%.*]] = and <2 x i64> [[TMP20]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP22:%.*]] = add <2 x i64> [[TMP20]], [[TMP8]]
; CHECK-NEXT: [[TMP23:%.*]] = shl <2 x i64> [[TMP8]], splat (i64 1)
; CHECK-NEXT: [[TMP24:%.*]] = and <2 x i64> [[TMP23]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP25:%.*]] = mul <2 x i64> [[TMP21]], [[TMP24]]
; CHECK-NEXT: [[TMP26:%.*]] = add <2 x i64> [[TMP22]], [[TMP25]]
; CHECK-NEXT: [[TMP27:%.*]] = xor <2 x i64> [[TMP26]], [[TMP11]]
; CHECK-NEXT: [[TMP28:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP27]], <2 x i64> [[TMP27]], <2 x i64> splat (i64 48))
; CHECK-NEXT: [[TMP29:%.*]] = and <2 x i64> [[TMP28]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP30:%.*]] = add <2 x i64> [[TMP28]], [[TMP18]]
; CHECK-NEXT: [[TMP31:%.*]] = shl <2 x i64> [[TMP18]], splat (i64 1)
; CHECK-NEXT: [[TMP32:%.*]] = and <2 x i64> [[TMP31]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP33:%.*]] = mul <2 x i64> [[TMP29]], [[TMP32]]
; CHECK-NEXT: [[TMP34:%.*]] = add <2 x i64> [[TMP30]], [[TMP33]]
; CHECK-NEXT: [[TMP35:%.*]] = xor <2 x i64> [[TMP34]], [[TMP20]]
; CHECK-NEXT: [[TMP36:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP35]], <2 x i64> [[TMP35]], <2 x i64> splat (i64 1))
; CHECK-NEXT: [[TMP37:%.*]] = and <2 x i64> [[STRIDED_VEC4]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP38:%.*]] = add <2 x i64> [[STRIDED_VEC4]], [[STRIDED_VEC1]]
; CHECK-NEXT: [[TMP39:%.*]] = shl <2 x i64> [[STRIDED_VEC1]], splat (i64 1)
; CHECK-NEXT: [[TMP40:%.*]] = and <2 x i64> [[TMP39]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP41:%.*]] = mul <2 x i64> [[TMP40]], [[TMP37]]
; CHECK-NEXT: [[TMP42:%.*]] = add <2 x i64> [[TMP38]], [[TMP41]]
; CHECK-NEXT: [[TMP43:%.*]] = xor <2 x i64> [[TMP42]], [[STRIDED_VEC7]]
; CHECK-NEXT: [[TMP44:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP43]], <2 x i64> [[TMP43]], <2 x i64> splat (i64 32))
; CHECK-NEXT: [[TMP45:%.*]] = and <2 x i64> [[TMP44]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP46:%.*]] = add <2 x i64> [[TMP44]], [[STRIDED_VEC10]]
; CHECK-NEXT: [[TMP47:%.*]] = shl <2 x i64> [[STRIDED_VEC10]], splat (i64 1)
; CHECK-NEXT: [[TMP48:%.*]] = and <2 x i64> [[TMP47]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP49:%.*]] = mul <2 x i64> [[TMP48]], [[TMP45]]
; CHECK-NEXT: [[TMP50:%.*]] = add <2 x i64> [[TMP46]], [[TMP49]]
; CHECK-NEXT: [[TMP51:%.*]] = xor <2 x i64> [[TMP50]], [[STRIDED_VEC4]]
; CHECK-NEXT: [[TMP52:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP51]], <2 x i64> [[TMP51]], <2 x i64> splat (i64 40))
; CHECK-NEXT: [[TMP53:%.*]] = and <2 x i64> [[TMP52]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP54:%.*]] = add <2 x i64> [[TMP52]], [[TMP42]]
; CHECK-NEXT: [[TMP55:%.*]] = shl <2 x i64> [[TMP42]], splat (i64 1)
; CHECK-NEXT: [[TMP56:%.*]] = and <2 x i64> [[TMP55]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP57:%.*]] = mul <2 x i64> [[TMP53]], [[TMP56]]
; CHECK-NEXT: [[TMP58:%.*]] = add <2 x i64> [[TMP54]], [[TMP57]]
; CHECK-NEXT: [[TMP59:%.*]] = xor <2 x i64> [[TMP58]], [[TMP44]]
; CHECK-NEXT: [[TMP60:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP59]], <2 x i64> [[TMP59]], <2 x i64> splat (i64 48))
; CHECK-NEXT: [[TMP61:%.*]] = and <2 x i64> [[TMP60]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP62:%.*]] = add <2 x i64> [[TMP60]], [[TMP50]]
; CHECK-NEXT: [[TMP63:%.*]] = shl <2 x i64> [[TMP50]], splat (i64 1)
; CHECK-NEXT: [[TMP64:%.*]] = and <2 x i64> [[TMP63]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP65:%.*]] = mul <2 x i64> [[TMP61]], [[TMP64]]
; CHECK-NEXT: [[TMP66:%.*]] = add <2 x i64> [[TMP62]], [[TMP65]]
; CHECK-NEXT: [[TMP67:%.*]] = xor <2 x i64> [[TMP66]], [[TMP52]]
; CHECK-NEXT: [[TMP68:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP67]], <2 x i64> [[TMP67]], <2 x i64> splat (i64 1))
; CHECK-NEXT: [[TMP69:%.*]] = getelementptr i8, ptr [[TMP1]], i32 128
; CHECK-NEXT: [[WIDE_VEC11:%.*]] = load <4 x i64>, ptr [[TMP69]], align 8
; CHECK-NEXT: [[STRIDED_VEC12:%.*]] = shufflevector <4 x i64> [[WIDE_VEC11]], <4 x i64> poison, <2 x i32> <i32 0, i32 2>
; CHECK-NEXT: [[STRIDED_VEC13:%.*]] = shufflevector <4 x i64> [[WIDE_VEC11]], <4 x i64> poison, <2 x i32> <i32 1, i32 3>
; CHECK-NEXT: [[TMP70:%.*]] = getelementptr i8, ptr [[TMP1]], i32 384
; CHECK-NEXT: [[WIDE_VEC14:%.*]] = load <4 x i64>, ptr [[TMP70]], align 8
; CHECK-NEXT: [[STRIDED_VEC15:%.*]] = shufflevector <4 x i64> [[WIDE_VEC14]], <4 x i64> poison, <2 x i32> <i32 0, i32 2>
; CHECK-NEXT: [[STRIDED_VEC16:%.*]] = shufflevector <4 x i64> [[WIDE_VEC14]], <4 x i64> poison, <2 x i32> <i32 1, i32 3>
; CHECK-NEXT: [[TMP71:%.*]] = and <2 x i64> [[STRIDED_VEC15]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP72:%.*]] = add <2 x i64> [[STRIDED_VEC15]], [[STRIDED_VEC12]]
; CHECK-NEXT: [[TMP73:%.*]] = shl <2 x i64> [[STRIDED_VEC12]], splat (i64 1)
; CHECK-NEXT: [[TMP74:%.*]] = and <2 x i64> [[TMP73]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP75:%.*]] = mul <2 x i64> [[TMP74]], [[TMP71]]
; CHECK-NEXT: [[TMP76:%.*]] = add <2 x i64> [[TMP72]], [[TMP75]]
; CHECK-NEXT: [[TMP77:%.*]] = getelementptr i8, ptr [[TMP1]], i32 896
; CHECK-NEXT: [[WIDE_VEC17:%.*]] = load <4 x i64>, ptr [[TMP77]], align 8
; CHECK-NEXT: [[STRIDED_VEC18:%.*]] = shufflevector <4 x i64> [[WIDE_VEC17]], <4 x i64> poison, <2 x i32> <i32 0, i32 2>
; CHECK-NEXT: [[STRIDED_VEC19:%.*]] = shufflevector <4 x i64> [[WIDE_VEC17]], <4 x i64> poison, <2 x i32> <i32 1, i32 3>
; CHECK-NEXT: [[TMP78:%.*]] = xor <2 x i64> [[TMP76]], [[STRIDED_VEC18]]
; CHECK-NEXT: [[TMP79:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP78]], <2 x i64> [[TMP78]], <2 x i64> splat (i64 32))
; CHECK-NEXT: [[TMP80:%.*]] = getelementptr i8, ptr [[TMP1]], i32 640
; CHECK-NEXT: [[WIDE_VEC20:%.*]] = load <4 x i64>, ptr [[TMP80]], align 8
; CHECK-NEXT: [[STRIDED_VEC21:%.*]] = shufflevector <4 x i64> [[WIDE_VEC20]], <4 x i64> poison, <2 x i32> <i32 0, i32 2>
; CHECK-NEXT: [[STRIDED_VEC22:%.*]] = shufflevector <4 x i64> [[WIDE_VEC20]], <4 x i64> poison, <2 x i32> <i32 1, i32 3>
; CHECK-NEXT: [[TMP81:%.*]] = and <2 x i64> [[TMP79]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP82:%.*]] = add <2 x i64> [[TMP79]], [[STRIDED_VEC21]]
; CHECK-NEXT: [[TMP83:%.*]] = shl <2 x i64> [[STRIDED_VEC21]], splat (i64 1)
; CHECK-NEXT: [[TMP84:%.*]] = and <2 x i64> [[TMP83]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP85:%.*]] = mul <2 x i64> [[TMP84]], [[TMP81]]
; CHECK-NEXT: [[TMP86:%.*]] = add <2 x i64> [[TMP82]], [[TMP85]]
; CHECK-NEXT: [[TMP87:%.*]] = xor <2 x i64> [[TMP86]], [[STRIDED_VEC15]]
; CHECK-NEXT: [[TMP88:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP87]], <2 x i64> [[TMP87]], <2 x i64> splat (i64 40))
; CHECK-NEXT: [[TMP89:%.*]] = and <2 x i64> [[TMP88]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP90:%.*]] = add <2 x i64> [[TMP88]], [[TMP76]]
; CHECK-NEXT: [[TMP91:%.*]] = shl <2 x i64> [[TMP76]], splat (i64 1)
; CHECK-NEXT: [[TMP92:%.*]] = and <2 x i64> [[TMP91]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP93:%.*]] = mul <2 x i64> [[TMP89]], [[TMP92]]
; CHECK-NEXT: [[TMP94:%.*]] = add <2 x i64> [[TMP90]], [[TMP93]]
; CHECK-NEXT: [[TMP95:%.*]] = xor <2 x i64> [[TMP94]], [[TMP79]]
; CHECK-NEXT: [[TMP96:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP95]], <2 x i64> [[TMP95]], <2 x i64> splat (i64 48))
; CHECK-NEXT: [[TMP97:%.*]] = and <2 x i64> [[TMP96]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP98:%.*]] = add <2 x i64> [[TMP96]], [[TMP86]]
; CHECK-NEXT: [[TMP99:%.*]] = shl <2 x i64> [[TMP86]], splat (i64 1)
; CHECK-NEXT: [[TMP100:%.*]] = and <2 x i64> [[TMP99]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP101:%.*]] = mul <2 x i64> [[TMP97]], [[TMP100]]
; CHECK-NEXT: [[TMP102:%.*]] = add <2 x i64> [[TMP98]], [[TMP101]]
; CHECK-NEXT: [[TMP103:%.*]] = xor <2 x i64> [[TMP102]], [[TMP88]]
; CHECK-NEXT: [[TMP104:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP103]], <2 x i64> [[TMP103]], <2 x i64> splat (i64 1))
; CHECK-NEXT: [[TMP105:%.*]] = and <2 x i64> [[STRIDED_VEC16]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP106:%.*]] = add <2 x i64> [[STRIDED_VEC16]], [[STRIDED_VEC13]]
; CHECK-NEXT: [[TMP107:%.*]] = shl <2 x i64> [[STRIDED_VEC13]], splat (i64 1)
; CHECK-NEXT: [[TMP108:%.*]] = and <2 x i64> [[TMP107]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP109:%.*]] = mul <2 x i64> [[TMP108]], [[TMP105]]
; CHECK-NEXT: [[TMP110:%.*]] = add <2 x i64> [[TMP106]], [[TMP109]]
; CHECK-NEXT: [[TMP111:%.*]] = xor <2 x i64> [[TMP110]], [[STRIDED_VEC19]]
; CHECK-NEXT: [[TMP112:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP111]], <2 x i64> [[TMP111]], <2 x i64> splat (i64 32))
; CHECK-NEXT: [[TMP113:%.*]] = and <2 x i64> [[TMP112]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP114:%.*]] = add <2 x i64> [[TMP112]], [[STRIDED_VEC22]]
; CHECK-NEXT: [[TMP115:%.*]] = shl <2 x i64> [[STRIDED_VEC22]], splat (i64 1)
; CHECK-NEXT: [[TMP116:%.*]] = and <2 x i64> [[TMP115]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP117:%.*]] = mul <2 x i64> [[TMP116]], [[TMP113]]
; CHECK-NEXT: [[TMP118:%.*]] = add <2 x i64> [[TMP114]], [[TMP117]]
; CHECK-NEXT: [[TMP119:%.*]] = xor <2 x i64> [[TMP118]], [[STRIDED_VEC16]]
; CHECK-NEXT: [[TMP120:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP119]], <2 x i64> [[TMP119]], <2 x i64> splat (i64 40))
; CHECK-NEXT: [[TMP121:%.*]] = and <2 x i64> [[TMP120]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP122:%.*]] = add <2 x i64> [[TMP120]], [[TMP110]]
; CHECK-NEXT: [[TMP123:%.*]] = shl <2 x i64> [[TMP110]], splat (i64 1)
; CHECK-NEXT: [[TMP124:%.*]] = and <2 x i64> [[TMP123]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP125:%.*]] = mul <2 x i64> [[TMP121]], [[TMP124]]
; CHECK-NEXT: [[TMP126:%.*]] = add <2 x i64> [[TMP122]], [[TMP125]]
; CHECK-NEXT: [[TMP127:%.*]] = xor <2 x i64> [[TMP126]], [[TMP112]]
; CHECK-NEXT: [[TMP128:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP127]], <2 x i64> [[TMP127]], <2 x i64> splat (i64 48))
; CHECK-NEXT: [[TMP129:%.*]] = and <2 x i64> [[TMP128]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP130:%.*]] = add <2 x i64> [[TMP128]], [[TMP118]]
; CHECK-NEXT: [[TMP131:%.*]] = shl <2 x i64> [[TMP118]], splat (i64 1)
; CHECK-NEXT: [[TMP132:%.*]] = and <2 x i64> [[TMP131]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP133:%.*]] = mul <2 x i64> [[TMP129]], [[TMP132]]
; CHECK-NEXT: [[TMP134:%.*]] = add <2 x i64> [[TMP130]], [[TMP133]]
; CHECK-NEXT: [[TMP135:%.*]] = xor <2 x i64> [[TMP134]], [[TMP120]]
; CHECK-NEXT: [[TMP136:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP135]], <2 x i64> [[TMP135]], <2 x i64> splat (i64 1))
; CHECK-NEXT: [[TMP137:%.*]] = and <2 x i64> [[TMP68]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP138:%.*]] = add <2 x i64> [[TMP68]], [[TMP26]]
; CHECK-NEXT: [[TMP139:%.*]] = shl <2 x i64> [[TMP26]], splat (i64 1)
; CHECK-NEXT: [[TMP140:%.*]] = and <2 x i64> [[TMP139]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP141:%.*]] = mul <2 x i64> [[TMP137]], [[TMP140]]
; CHECK-NEXT: [[TMP142:%.*]] = add <2 x i64> [[TMP138]], [[TMP141]]
; CHECK-NEXT: [[TMP143:%.*]] = xor <2 x i64> [[TMP128]], [[TMP142]]
; CHECK-NEXT: [[TMP144:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP143]], <2 x i64> [[TMP143]], <2 x i64> splat (i64 32))
; CHECK-NEXT: [[TMP145:%.*]] = and <2 x i64> [[TMP144]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP146:%.*]] = add <2 x i64> [[TMP144]], [[TMP102]]
; CHECK-NEXT: [[TMP147:%.*]] = shl <2 x i64> [[TMP102]], splat (i64 1)
; CHECK-NEXT: [[TMP148:%.*]] = and <2 x i64> [[TMP147]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP149:%.*]] = mul <2 x i64> [[TMP145]], [[TMP148]]
; CHECK-NEXT: [[TMP150:%.*]] = add <2 x i64> [[TMP146]], [[TMP149]]
; CHECK-NEXT: [[TMP151:%.*]] = xor <2 x i64> [[TMP150]], [[TMP68]]
; CHECK-NEXT: [[TMP152:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP151]], <2 x i64> [[TMP151]], <2 x i64> splat (i64 40))
; CHECK-NEXT: [[TMP153:%.*]] = and <2 x i64> [[TMP152]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP154:%.*]] = add <2 x i64> [[TMP152]], [[TMP142]]
; CHECK-NEXT: [[TMP155:%.*]] = shl <2 x i64> [[TMP142]], splat (i64 1)
; CHECK-NEXT: [[TMP156:%.*]] = and <2 x i64> [[TMP155]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP157:%.*]] = mul <2 x i64> [[TMP153]], [[TMP156]]
; CHECK-NEXT: [[TMP158:%.*]] = add <2 x i64> [[TMP154]], [[TMP157]]
; CHECK-NEXT: [[TMP159:%.*]] = xor <2 x i64> [[TMP158]], [[TMP144]]
; CHECK-NEXT: [[TMP160:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP159]], <2 x i64> [[TMP159]], <2 x i64> splat (i64 48))
; CHECK-NEXT: [[TMP161:%.*]] = and <2 x i64> [[TMP160]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP162:%.*]] = add <2 x i64> [[TMP160]], [[TMP150]]
; CHECK-NEXT: [[TMP163:%.*]] = shl <2 x i64> [[TMP150]], splat (i64 1)
; CHECK-NEXT: [[TMP164:%.*]] = and <2 x i64> [[TMP163]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP165:%.*]] = mul <2 x i64> [[TMP161]], [[TMP164]]
; CHECK-NEXT: [[TMP166:%.*]] = add <2 x i64> [[TMP162]], [[TMP165]]
; CHECK-NEXT: [[TMP167:%.*]] = xor <2 x i64> [[TMP166]], [[TMP152]]
; CHECK-NEXT: [[TMP168:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP167]], <2 x i64> [[TMP167]], <2 x i64> splat (i64 1))
; CHECK-NEXT: [[TMP169:%.*]] = and <2 x i64> [[TMP104]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP170:%.*]] = add <2 x i64> [[TMP104]], [[TMP58]]
; CHECK-NEXT: [[TMP171:%.*]] = shl <2 x i64> [[TMP58]], splat (i64 1)
; CHECK-NEXT: [[TMP172:%.*]] = and <2 x i64> [[TMP171]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP173:%.*]] = mul <2 x i64> [[TMP169]], [[TMP172]]
; CHECK-NEXT: [[TMP174:%.*]] = add <2 x i64> [[TMP170]], [[TMP173]]
; CHECK-NEXT: [[TMP175:%.*]] = xor <2 x i64> [[TMP174]], [[TMP28]]
; CHECK-NEXT: [[TMP176:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP175]], <2 x i64> [[TMP175]], <2 x i64> splat (i64 32))
; CHECK-NEXT: [[TMP177:%.*]] = and <2 x i64> [[TMP176]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP178:%.*]] = add <2 x i64> [[TMP134]], [[TMP176]]
; CHECK-NEXT: [[TMP179:%.*]] = shl <2 x i64> [[TMP134]], splat (i64 1)
; CHECK-NEXT: [[TMP180:%.*]] = and <2 x i64> [[TMP179]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP181:%.*]] = mul <2 x i64> [[TMP180]], [[TMP177]]
; CHECK-NEXT: [[TMP182:%.*]] = add <2 x i64> [[TMP178]], [[TMP181]]
; CHECK-NEXT: [[TMP183:%.*]] = xor <2 x i64> [[TMP182]], [[TMP104]]
; CHECK-NEXT: [[TMP184:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP183]], <2 x i64> [[TMP183]], <2 x i64> splat (i64 40))
; CHECK-NEXT: [[TMP185:%.*]] = and <2 x i64> [[TMP184]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP186:%.*]] = add <2 x i64> [[TMP184]], [[TMP174]]
; CHECK-NEXT: [[TMP187:%.*]] = shl <2 x i64> [[TMP174]], splat (i64 1)
; CHECK-NEXT: [[TMP188:%.*]] = and <2 x i64> [[TMP187]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP189:%.*]] = mul <2 x i64> [[TMP185]], [[TMP188]]
; CHECK-NEXT: [[TMP190:%.*]] = add <2 x i64> [[TMP186]], [[TMP189]]
; CHECK-NEXT: [[TMP191:%.*]] = shufflevector <2 x i64> [[TMP158]], <2 x i64> [[TMP190]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
; CHECK-NEXT: [[INTERLEAVED_VEC:%.*]] = shufflevector <4 x i64> [[TMP191]], <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
; CHECK-NEXT: store <4 x i64> [[INTERLEAVED_VEC]], ptr [[TMP1]], align 8
; CHECK-NEXT: [[TMP192:%.*]] = xor <2 x i64> [[TMP190]], [[TMP176]]
; CHECK-NEXT: [[TMP193:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP192]], <2 x i64> [[TMP192]], <2 x i64> splat (i64 48))
; CHECK-NEXT: [[TMP194:%.*]] = and <2 x i64> [[TMP193]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP195:%.*]] = add <2 x i64> [[TMP193]], [[TMP182]]
; CHECK-NEXT: [[TMP196:%.*]] = shl <2 x i64> [[TMP182]], splat (i64 1)
; CHECK-NEXT: [[TMP197:%.*]] = and <2 x i64> [[TMP196]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP198:%.*]] = mul <2 x i64> [[TMP194]], [[TMP197]]
; CHECK-NEXT: [[TMP199:%.*]] = add <2 x i64> [[TMP195]], [[TMP198]]
; CHECK-NEXT: [[TMP200:%.*]] = shufflevector <2 x i64> [[TMP166]], <2 x i64> [[TMP199]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
; CHECK-NEXT: [[INTERLEAVED_VEC23:%.*]] = shufflevector <4 x i64> [[TMP200]], <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
; CHECK-NEXT: store <4 x i64> [[INTERLEAVED_VEC23]], ptr [[TMP80]], align 8
; CHECK-NEXT: [[TMP201:%.*]] = xor <2 x i64> [[TMP199]], [[TMP184]]
; CHECK-NEXT: [[TMP202:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP201]], <2 x i64> [[TMP201]], <2 x i64> splat (i64 1))
; CHECK-NEXT: [[TMP203:%.*]] = and <2 x i64> [[TMP136]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP204:%.*]] = add <2 x i64> [[TMP136]], [[TMP94]]
; CHECK-NEXT: [[TMP205:%.*]] = shl <2 x i64> [[TMP94]], splat (i64 1)
; CHECK-NEXT: [[TMP206:%.*]] = and <2 x i64> [[TMP205]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP207:%.*]] = mul <2 x i64> [[TMP203]], [[TMP206]]
; CHECK-NEXT: [[TMP208:%.*]] = add <2 x i64> [[TMP204]], [[TMP207]]
; CHECK-NEXT: [[TMP209:%.*]] = xor <2 x i64> [[TMP208]], [[TMP60]]
; CHECK-NEXT: [[TMP210:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP209]], <2 x i64> [[TMP209]], <2 x i64> splat (i64 32))
; CHECK-NEXT: [[TMP211:%.*]] = and <2 x i64> [[TMP210]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP212:%.*]] = add <2 x i64> [[TMP210]], [[TMP34]]
; CHECK-NEXT: [[TMP213:%.*]] = shl <2 x i64> [[TMP34]], splat (i64 1)
; CHECK-NEXT: [[TMP214:%.*]] = and <2 x i64> [[TMP213]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP215:%.*]] = mul <2 x i64> [[TMP211]], [[TMP214]]
; CHECK-NEXT: [[TMP216:%.*]] = add <2 x i64> [[TMP212]], [[TMP215]]
; CHECK-NEXT: [[TMP217:%.*]] = xor <2 x i64> [[TMP216]], [[TMP136]]
; CHECK-NEXT: [[TMP218:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP217]], <2 x i64> [[TMP217]], <2 x i64> splat (i64 40))
; CHECK-NEXT: [[TMP219:%.*]] = and <2 x i64> [[TMP218]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP220:%.*]] = add <2 x i64> [[TMP218]], [[TMP208]]
; CHECK-NEXT: [[TMP221:%.*]] = shl <2 x i64> [[TMP208]], splat (i64 1)
; CHECK-NEXT: [[TMP222:%.*]] = and <2 x i64> [[TMP221]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP223:%.*]] = mul <2 x i64> [[TMP219]], [[TMP222]]
; CHECK-NEXT: [[TMP224:%.*]] = add <2 x i64> [[TMP220]], [[TMP223]]
; CHECK-NEXT: [[TMP225:%.*]] = xor <2 x i64> [[TMP224]], [[TMP210]]
; CHECK-NEXT: [[TMP226:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP225]], <2 x i64> [[TMP225]], <2 x i64> splat (i64 48))
; CHECK-NEXT: [[TMP227:%.*]] = shufflevector <2 x i64> [[TMP193]], <2 x i64> [[TMP226]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
; CHECK-NEXT: [[INTERLEAVED_VEC24:%.*]] = shufflevector <4 x i64> [[TMP227]], <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
; CHECK-NEXT: store <4 x i64> [[INTERLEAVED_VEC24]], ptr [[TMP9]], align 8
; CHECK-NEXT: [[TMP228:%.*]] = and <2 x i64> [[TMP226]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP229:%.*]] = add <2 x i64> [[TMP226]], [[TMP216]]
; CHECK-NEXT: [[TMP230:%.*]] = shl <2 x i64> [[TMP216]], splat (i64 1)
; CHECK-NEXT: [[TMP231:%.*]] = and <2 x i64> [[TMP230]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP232:%.*]] = mul <2 x i64> [[TMP228]], [[TMP231]]
; CHECK-NEXT: [[TMP233:%.*]] = add <2 x i64> [[TMP229]], [[TMP232]]
; CHECK-NEXT: [[TMP234:%.*]] = xor <2 x i64> [[TMP233]], [[TMP218]]
; CHECK-NEXT: [[TMP235:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP234]], <2 x i64> [[TMP234]], <2 x i64> splat (i64 1))
; CHECK-NEXT: [[TMP236:%.*]] = shufflevector <2 x i64> [[TMP202]], <2 x i64> [[TMP235]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
; CHECK-NEXT: [[INTERLEAVED_VEC25:%.*]] = shufflevector <4 x i64> [[TMP236]], <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
; CHECK-NEXT: store <4 x i64> [[INTERLEAVED_VEC25]], ptr [[TMP70]], align 8
; CHECK-NEXT: [[TMP237:%.*]] = and <2 x i64> [[TMP36]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP238:%.*]] = add <2 x i64> [[TMP126]], [[TMP36]]
; CHECK-NEXT: [[TMP239:%.*]] = shl <2 x i64> [[TMP126]], splat (i64 1)
; CHECK-NEXT: [[TMP240:%.*]] = and <2 x i64> [[TMP239]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP241:%.*]] = mul <2 x i64> [[TMP240]], [[TMP237]]
; CHECK-NEXT: [[TMP242:%.*]] = add <2 x i64> [[TMP238]], [[TMP241]]
; CHECK-NEXT: [[TMP243:%.*]] = xor <2 x i64> [[TMP242]], [[TMP96]]
; CHECK-NEXT: [[TMP244:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP243]], <2 x i64> [[TMP243]], <2 x i64> splat (i64 32))
; CHECK-NEXT: [[TMP245:%.*]] = and <2 x i64> [[TMP244]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP246:%.*]] = add <2 x i64> [[TMP244]], [[TMP66]]
; CHECK-NEXT: [[TMP247:%.*]] = shl <2 x i64> [[TMP66]], splat (i64 1)
; CHECK-NEXT: [[TMP248:%.*]] = and <2 x i64> [[TMP247]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP249:%.*]] = mul <2 x i64> [[TMP245]], [[TMP248]]
; CHECK-NEXT: [[TMP250:%.*]] = add <2 x i64> [[TMP246]], [[TMP249]]
; CHECK-NEXT: [[TMP251:%.*]] = xor <2 x i64> [[TMP250]], [[TMP36]]
; CHECK-NEXT: [[TMP252:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP251]], <2 x i64> [[TMP251]], <2 x i64> splat (i64 40))
; CHECK-NEXT: [[TMP253:%.*]] = and <2 x i64> [[TMP252]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP254:%.*]] = add <2 x i64> [[TMP252]], [[TMP242]]
; CHECK-NEXT: [[TMP255:%.*]] = shl <2 x i64> [[TMP242]], splat (i64 1)
; CHECK-NEXT: [[TMP256:%.*]] = and <2 x i64> [[TMP255]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP257:%.*]] = mul <2 x i64> [[TMP253]], [[TMP256]]
; CHECK-NEXT: [[TMP258:%.*]] = add <2 x i64> [[TMP254]], [[TMP257]]
; CHECK-NEXT: [[TMP259:%.*]] = shufflevector <2 x i64> [[TMP224]], <2 x i64> [[TMP258]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
; CHECK-NEXT: [[INTERLEAVED_VEC26:%.*]] = shufflevector <4 x i64> [[TMP259]], <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
; CHECK-NEXT: store <4 x i64> [[INTERLEAVED_VEC26]], ptr [[TMP69]], align 8
; CHECK-NEXT: [[TMP260:%.*]] = xor <2 x i64> [[TMP258]], [[TMP244]]
; CHECK-NEXT: [[TMP261:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP260]], <2 x i64> [[TMP260]], <2 x i64> splat (i64 48))
; CHECK-NEXT: [[TMP262:%.*]] = shufflevector <2 x i64> [[TMP261]], <2 x i64> [[TMP160]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
; CHECK-NEXT: [[INTERLEAVED_VEC27:%.*]] = shufflevector <4 x i64> [[TMP262]], <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
; CHECK-NEXT: store <4 x i64> [[INTERLEAVED_VEC27]], ptr [[TMP77]], align 8
; CHECK-NEXT: [[TMP263:%.*]] = and <2 x i64> [[TMP261]], splat (i64 4294967295)
; CHECK-NEXT: [[TMP264:%.*]] = add <2 x i64> [[TMP261]], [[TMP250]]
; CHECK-NEXT: [[TMP265:%.*]] = shl <2 x i64> [[TMP250]], splat (i64 1)
; CHECK-NEXT: [[TMP266:%.*]] = and <2 x i64> [[TMP265]], splat (i64 8589934590)
; CHECK-NEXT: [[TMP267:%.*]] = mul <2 x i64> [[TMP263]], [[TMP266]]
; CHECK-NEXT: [[TMP268:%.*]] = add <2 x i64> [[TMP264]], [[TMP267]]
; CHECK-NEXT: [[TMP269:%.*]] = shufflevector <2 x i64> [[TMP233]], <2 x i64> [[TMP268]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
; CHECK-NEXT: [[INTERLEAVED_VEC28:%.*]] = shufflevector <4 x i64> [[TMP269]], <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
; CHECK-NEXT: store <4 x i64> [[INTERLEAVED_VEC28]], ptr [[TMP12]], align 8
; CHECK-NEXT: [[TMP270:%.*]] = xor <2 x i64> [[TMP268]], [[TMP252]]
; CHECK-NEXT: [[TMP271:%.*]] = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> [[TMP270]], <2 x i64> [[TMP270]], <2 x i64> splat (i64 1))
; CHECK-NEXT: [[TMP272:%.*]] = shufflevector <2 x i64> [[TMP271]], <2 x i64> [[TMP168]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
; CHECK-NEXT: [[INTERLEAVED_VEC29:%.*]] = shufflevector <4 x i64> [[TMP272]], <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
; CHECK-NEXT: store <4 x i64> [[INTERLEAVED_VEC29]], ptr [[TMP2]], align 8
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2
; CHECK-NEXT: [[TMP273:%.*]] = icmp eq i32 [[INDEX_NEXT]], 8
; CHECK-NEXT: br i1 [[TMP273]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
; CHECK: [[MIDDLE_BLOCK]]:
; CHECK-NEXT: br label %[[DOTEXITSTUB:.*]]
; CHECK: [[DOTEXITSTUB]]:
; CHECK-NEXT: ret void
;
newFuncRoot:
br label %bb
bb: ; preds = %bb, %newFuncRoot
%i = phi i32 [ %i290, %bb ], [ 0, %newFuncRoot ]
%i1 = shl nuw nsw i32 %i, 4
%i2 = getelementptr i8, ptr %arg, i32 %i1
%i3 = load i64, ptr %i2, align 8
%i4 = getelementptr i8, ptr %i2, i32 256
%i5 = load i64, ptr %i4, align 8
%i6 = and i64 %i5, 4294967295
%i7 = add i64 %i5, %i3
%i8 = shl i64 %i3, 1
%i9 = and i64 %i8, 8589934590
%i10 = mul i64 %i9, %i6
%i11 = add i64 %i7, %i10
%i12 = getelementptr i8, ptr %i2, i32 768
%i13 = load i64, ptr %i12, align 8
%i14 = xor i64 %i11, %i13
%i15 = tail call i64 @llvm.fshl.i64(i64 %i14, i64 %i14, i64 32)
%i16 = getelementptr i8, ptr %i2, i32 512
%i17 = load i64, ptr %i16, align 8
%i18 = and i64 %i15, 4294967295
%i19 = add i64 %i15, %i17
%i20 = shl i64 %i17, 1
%i21 = and i64 %i20, 8589934590
%i22 = mul i64 %i21, %i18
%i23 = add i64 %i19, %i22
%i24 = xor i64 %i23, %i5
%i25 = tail call i64 @llvm.fshl.i64(i64 %i24, i64 %i24, i64 40)
%i26 = and i64 %i25, 4294967295
%i27 = add i64 %i25, %i11
%i28 = shl i64 %i11, 1
%i29 = and i64 %i28, 8589934590
%i30 = mul i64 %i26, %i29
%i31 = add i64 %i27, %i30
%i32 = xor i64 %i31, %i15
%i33 = tail call i64 @llvm.fshl.i64(i64 %i32, i64 %i32, i64 48)
%i34 = and i64 %i33, 4294967295
%i35 = add i64 %i33, %i23
%i36 = shl i64 %i23, 1
%i37 = and i64 %i36, 8589934590
%i38 = mul i64 %i34, %i37
%i39 = add i64 %i35, %i38
%i40 = xor i64 %i39, %i25
%i41 = tail call i64 @llvm.fshl.i64(i64 %i40, i64 %i40, i64 1)
%i42 = getelementptr i8, ptr %i2, i32 8
%i43 = load i64, ptr %i42, align 8
%i44 = getelementptr i8, ptr %i2, i32 264
%i45 = load i64, ptr %i44, align 8
%i46 = and i64 %i45, 4294967295
%i47 = add i64 %i45, %i43
%i48 = shl i64 %i43, 1
%i49 = and i64 %i48, 8589934590
%i50 = mul i64 %i49, %i46
%i51 = add i64 %i47, %i50
%i52 = getelementptr i8, ptr %i2, i32 776
%i53 = load i64, ptr %i52, align 8
%i54 = xor i64 %i51, %i53
%i55 = tail call i64 @llvm.fshl.i64(i64 %i54, i64 %i54, i64 32)
%i56 = getelementptr i8, ptr %i2, i32 520
%i57 = load i64, ptr %i56, align 8
%i58 = and i64 %i55, 4294967295
%i59 = add i64 %i55, %i57
%i60 = shl i64 %i57, 1
%i61 = and i64 %i60, 8589934590
%i62 = mul i64 %i61, %i58
%i63 = add i64 %i59, %i62
%i64 = xor i64 %i63, %i45
%i65 = tail call i64 @llvm.fshl.i64(i64 %i64, i64 %i64, i64 40)
%i66 = and i64 %i65, 4294967295
%i67 = add i64 %i65, %i51
%i68 = shl i64 %i51, 1
%i69 = and i64 %i68, 8589934590
%i70 = mul i64 %i66, %i69
%i71 = add i64 %i67, %i70
%i72 = xor i64 %i71, %i55
%i73 = tail call i64 @llvm.fshl.i64(i64 %i72, i64 %i72, i64 48)
%i74 = and i64 %i73, 4294967295
%i75 = add i64 %i73, %i63
%i76 = shl i64 %i63, 1
%i77 = and i64 %i76, 8589934590
%i78 = mul i64 %i74, %i77
%i79 = add i64 %i75, %i78
%i80 = xor i64 %i79, %i65
%i81 = tail call i64 @llvm.fshl.i64(i64 %i80, i64 %i80, i64 1)
%i82 = getelementptr i8, ptr %i2, i32 128
%i83 = load i64, ptr %i82, align 8
%i84 = getelementptr i8, ptr %i2, i32 384
%i85 = load i64, ptr %i84, align 8
%i86 = and i64 %i85, 4294967295
%i87 = add i64 %i85, %i83
%i88 = shl i64 %i83, 1
%i89 = and i64 %i88, 8589934590
%i90 = mul i64 %i89, %i86
%i91 = add i64 %i87, %i90
%i92 = getelementptr i8, ptr %i2, i32 896
%i93 = load i64, ptr %i92, align 8
%i94 = xor i64 %i91, %i93
%i95 = tail call i64 @llvm.fshl.i64(i64 %i94, i64 %i94, i64 32)
%i96 = getelementptr i8, ptr %i2, i32 640
%i97 = load i64, ptr %i96, align 8
%i98 = and i64 %i95, 4294967295
%i99 = add i64 %i95, %i97
%i100 = shl i64 %i97, 1
%i101 = and i64 %i100, 8589934590
%i102 = mul i64 %i101, %i98
%i103 = add i64 %i99, %i102
%i104 = xor i64 %i103, %i85
%i105 = tail call i64 @llvm.fshl.i64(i64 %i104, i64 %i104, i64 40)
%i106 = and i64 %i105, 4294967295
%i107 = add i64 %i105, %i91
%i108 = shl i64 %i91, 1
%i109 = and i64 %i108, 8589934590
%i110 = mul i64 %i106, %i109
%i111 = add i64 %i107, %i110
%i112 = xor i64 %i111, %i95
%i113 = tail call i64 @llvm.fshl.i64(i64 %i112, i64 %i112, i64 48)
%i114 = and i64 %i113, 4294967295
%i115 = add i64 %i113, %i103
%i116 = shl i64 %i103, 1
%i117 = and i64 %i116, 8589934590
%i118 = mul i64 %i114, %i117
%i119 = add i64 %i115, %i118
%i120 = xor i64 %i119, %i105
%i121 = tail call i64 @llvm.fshl.i64(i64 %i120, i64 %i120, i64 1)
%i122 = getelementptr i8, ptr %i2, i32 136
%i123 = load i64, ptr %i122, align 8
%i124 = getelementptr i8, ptr %i2, i32 392
%i125 = load i64, ptr %i124, align 8
%i126 = and i64 %i125, 4294967295
%i127 = add i64 %i125, %i123
%i128 = shl i64 %i123, 1
%i129 = and i64 %i128, 8589934590
%i130 = mul i64 %i129, %i126
%i131 = add i64 %i127, %i130
%i132 = getelementptr i8, ptr %i2, i32 904
%i133 = load i64, ptr %i132, align 8
%i134 = xor i64 %i131, %i133
%i135 = tail call i64 @llvm.fshl.i64(i64 %i134, i64 %i134, i64 32)
%i136 = getelementptr i8, ptr %i2, i32 648
%i137 = load i64, ptr %i136, align 8
%i138 = and i64 %i135, 4294967295
%i139 = add i64 %i135, %i137
%i140 = shl i64 %i137, 1
%i141 = and i64 %i140, 8589934590
%i142 = mul i64 %i141, %i138
%i143 = add i64 %i139, %i142
%i144 = xor i64 %i143, %i125
%i145 = tail call i64 @llvm.fshl.i64(i64 %i144, i64 %i144, i64 40)
%i146 = and i64 %i145, 4294967295
%i147 = add i64 %i145, %i131
%i148 = shl i64 %i131, 1
%i149 = and i64 %i148, 8589934590
%i150 = mul i64 %i146, %i149
%i151 = add i64 %i147, %i150
%i152 = xor i64 %i151, %i135
%i153 = tail call i64 @llvm.fshl.i64(i64 %i152, i64 %i152, i64 48)
%i154 = and i64 %i153, 4294967295
%i155 = add i64 %i153, %i143
%i156 = shl i64 %i143, 1
%i157 = and i64 %i156, 8589934590
%i158 = mul i64 %i154, %i157
%i159 = add i64 %i155, %i158
%i160 = xor i64 %i159, %i145
%i161 = tail call i64 @llvm.fshl.i64(i64 %i160, i64 %i160, i64 1)
%i162 = and i64 %i81, 4294967295
%i163 = add i64 %i81, %i31
%i164 = shl i64 %i31, 1
%i165 = and i64 %i164, 8589934590
%i166 = mul i64 %i162, %i165
%i167 = add i64 %i163, %i166
%i168 = xor i64 %i153, %i167
%i169 = tail call i64 @llvm.fshl.i64(i64 %i168, i64 %i168, i64 32)
%i170 = and i64 %i169, 4294967295
%i171 = add i64 %i169, %i119
%i172 = shl i64 %i119, 1
%i173 = and i64 %i172, 8589934590
%i174 = mul i64 %i170, %i173
%i175 = add i64 %i171, %i174
%i176 = xor i64 %i175, %i81
%i177 = tail call i64 @llvm.fshl.i64(i64 %i176, i64 %i176, i64 40)
%i178 = and i64 %i177, 4294967295
%i179 = add i64 %i177, %i167
%i180 = shl i64 %i167, 1
%i181 = and i64 %i180, 8589934590
%i182 = mul i64 %i178, %i181
%i183 = add i64 %i179, %i182
store i64 %i183, ptr %i2, align 8
%i184 = xor i64 %i183, %i169
%i185 = tail call i64 @llvm.fshl.i64(i64 %i184, i64 %i184, i64 48)
store i64 %i185, ptr %i132, align 8
%i186 = and i64 %i185, 4294967295
%i187 = add i64 %i185, %i175
%i188 = shl i64 %i175, 1
%i189 = and i64 %i188, 8589934590
%i190 = mul i64 %i186, %i189
%i191 = add i64 %i187, %i190
store i64 %i191, ptr %i96, align 8
%i192 = xor i64 %i191, %i177
%i193 = tail call i64 @llvm.fshl.i64(i64 %i192, i64 %i192, i64 1)
store i64 %i193, ptr %i44, align 8
%i194 = and i64 %i121, 4294967295
%i195 = add i64 %i121, %i71
%i196 = shl i64 %i71, 1
%i197 = and i64 %i196, 8589934590
%i198 = mul i64 %i194, %i197
%i199 = add i64 %i195, %i198
%i200 = xor i64 %i199, %i33
%i201 = tail call i64 @llvm.fshl.i64(i64 %i200, i64 %i200, i64 32)
%i202 = and i64 %i201, 4294967295
%i203 = add i64 %i159, %i201
%i204 = shl i64 %i159, 1
%i205 = and i64 %i204, 8589934590
%i206 = mul i64 %i205, %i202
%i207 = add i64 %i203, %i206
%i208 = xor i64 %i207, %i121
%i209 = tail call i64 @llvm.fshl.i64(i64 %i208, i64 %i208, i64 40)
%i210 = and i64 %i209, 4294967295
%i211 = add i64 %i209, %i199
%i212 = shl i64 %i199, 1
%i213 = and i64 %i212, 8589934590
%i214 = mul i64 %i210, %i213
%i215 = add i64 %i211, %i214
store i64 %i215, ptr %i42, align 8
%i216 = xor i64 %i215, %i201
%i217 = tail call i64 @llvm.fshl.i64(i64 %i216, i64 %i216, i64 48)
store i64 %i217, ptr %i12, align 8
%i218 = and i64 %i217, 4294967295
%i219 = add i64 %i217, %i207
%i220 = shl i64 %i207, 1
%i221 = and i64 %i220, 8589934590
%i222 = mul i64 %i218, %i221
%i223 = add i64 %i219, %i222
store i64 %i223, ptr %i136, align 8
%i224 = xor i64 %i223, %i209
%i225 = tail call i64 @llvm.fshl.i64(i64 %i224, i64 %i224, i64 1)
store i64 %i225, ptr %i84, align 8
%i226 = and i64 %i161, 4294967295
%i227 = add i64 %i161, %i111
%i228 = shl i64 %i111, 1
%i229 = and i64 %i228, 8589934590
%i230 = mul i64 %i226, %i229
%i231 = add i64 %i227, %i230
%i232 = xor i64 %i231, %i73
%i233 = tail call i64 @llvm.fshl.i64(i64 %i232, i64 %i232, i64 32)
%i234 = and i64 %i233, 4294967295
%i235 = add i64 %i233, %i39
%i236 = shl i64 %i39, 1
%i237 = and i64 %i236, 8589934590
%i238 = mul i64 %i234, %i237
%i239 = add i64 %i235, %i238
%i240 = xor i64 %i239, %i161
%i241 = tail call i64 @llvm.fshl.i64(i64 %i240, i64 %i240, i64 40)
%i242 = and i64 %i241, 4294967295
%i243 = add i64 %i241, %i231
%i244 = shl i64 %i231, 1
%i245 = and i64 %i244, 8589934590
%i246 = mul i64 %i242, %i245
%i247 = add i64 %i243, %i246
store i64 %i247, ptr %i82, align 8
%i248 = xor i64 %i247, %i233
%i249 = tail call i64 @llvm.fshl.i64(i64 %i248, i64 %i248, i64 48)
store i64 %i249, ptr %i52, align 8
%i250 = and i64 %i249, 4294967295
%i251 = add i64 %i249, %i239
%i252 = shl i64 %i239, 1
%i253 = and i64 %i252, 8589934590
%i254 = mul i64 %i250, %i253
%i255 = add i64 %i251, %i254
store i64 %i255, ptr %i16, align 8
%i256 = xor i64 %i255, %i241
%i257 = tail call i64 @llvm.fshl.i64(i64 %i256, i64 %i256, i64 1)
store i64 %i257, ptr %i124, align 8
%i258 = and i64 %i41, 4294967295
%i259 = add i64 %i151, %i41
%i260 = shl i64 %i151, 1
%i261 = and i64 %i260, 8589934590
%i262 = mul i64 %i261, %i258
%i263 = add i64 %i259, %i262
%i264 = xor i64 %i263, %i113
%i265 = tail call i64 @llvm.fshl.i64(i64 %i264, i64 %i264, i64 32)
%i266 = and i64 %i265, 4294967295
%i267 = add i64 %i265, %i79
%i268 = shl i64 %i79, 1
%i269 = and i64 %i268, 8589934590
%i270 = mul i64 %i266, %i269
%i271 = add i64 %i267, %i270
%i272 = xor i64 %i271, %i41
%i273 = tail call i64 @llvm.fshl.i64(i64 %i272, i64 %i272, i64 40)
%i274 = and i64 %i273, 4294967295
%i275 = add i64 %i273, %i263
%i276 = shl i64 %i263, 1
%i277 = and i64 %i276, 8589934590
%i278 = mul i64 %i274, %i277
%i279 = add i64 %i275, %i278
store i64 %i279, ptr %i122, align 8
%i280 = xor i64 %i279, %i265
%i281 = tail call i64 @llvm.fshl.i64(i64 %i280, i64 %i280, i64 48)
store i64 %i281, ptr %i92, align 8
%i282 = and i64 %i281, 4294967295
%i283 = add i64 %i281, %i271
%i284 = shl i64 %i271, 1
%i285 = and i64 %i284, 8589934590
%i286 = mul i64 %i282, %i285
%i287 = add i64 %i283, %i286
store i64 %i287, ptr %i56, align 8
%i288 = xor i64 %i287, %i273
%i289 = tail call i64 @llvm.fshl.i64(i64 %i288, i64 %i288, i64 1)
store i64 %i289, ptr %i4, align 8
%i290 = add nuw nsw i32 %i, 1
%i291 = icmp eq i32 %i290, 8
br i1 %i291, label %.exitStub, label %bb
.exitStub: ; preds = %bb
ret void
}
declare i64 @llvm.fshl.i64(i64, i64, i64)
;.
; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}
; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}
;.