; LLVM IR from tfhe/spqlios-arithmetic :: test/testlib (sha3)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@__const.sha3_keccakf.keccakf_rndc = external hidden unnamed_addr constant [24 x i64], align 16
@__const.sha3_keccakf.keccakf_rotc = external hidden unnamed_addr constant [24 x i32], align 16
@__const.sha3_keccakf.keccakf_piln = external hidden unnamed_addr constant [24 x i32], align 16

; Function Attrs: nounwind uwtable
define dso_local void @sha3_keccakf(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca [24 x i64], align 16
  %4 = alloca [24 x i32], align 16
  %5 = alloca [24 x i32], align 16
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i64, align 8
  %10 = alloca [5 x i64], align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 192, ptr %3) #3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %3, ptr align 16 @__const.sha3_keccakf.keccakf_rndc, i64 192, i1 false)
  call void @llvm.lifetime.start.p0(i64 96, ptr %4) #3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %4, ptr align 16 @__const.sha3_keccakf.keccakf_rotc, i64 96, i1 false)
  call void @llvm.lifetime.start.p0(i64 96, ptr %5) #3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %5, ptr align 16 @__const.sha3_keccakf.keccakf_piln, i64 96, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 40, ptr %10) #3
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %11

11:                                               ; preds = %213, %1
  %12 = load i32, ptr %8, align 4, !tbaa !9
  %13 = icmp slt i32 %12, 24
  br i1 %13, label %14, label %216

14:                                               ; preds = %11
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %15

15:                                               ; preds = %55, %14
  %16 = load i32, ptr %6, align 4, !tbaa !9
  %17 = icmp slt i32 %16, 5
  br i1 %17, label %18, label %58

18:                                               ; preds = %15
  %19 = load ptr, ptr %2, align 8, !tbaa !5
  %20 = load i32, ptr %6, align 4, !tbaa !9
  %21 = sext i32 %20 to i64
  %22 = getelementptr inbounds i64, ptr %19, i64 %21
  %23 = load i64, ptr %22, align 8, !tbaa !11
  %24 = load ptr, ptr %2, align 8, !tbaa !5
  %25 = load i32, ptr %6, align 4, !tbaa !9
  %26 = add nsw i32 %25, 5
  %27 = sext i32 %26 to i64
  %28 = getelementptr inbounds i64, ptr %24, i64 %27
  %29 = load i64, ptr %28, align 8, !tbaa !11
  %30 = xor i64 %23, %29
  %31 = load ptr, ptr %2, align 8, !tbaa !5
  %32 = load i32, ptr %6, align 4, !tbaa !9
  %33 = add nsw i32 %32, 10
  %34 = sext i32 %33 to i64
  %35 = getelementptr inbounds i64, ptr %31, i64 %34
  %36 = load i64, ptr %35, align 8, !tbaa !11
  %37 = xor i64 %30, %36
  %38 = load ptr, ptr %2, align 8, !tbaa !5
  %39 = load i32, ptr %6, align 4, !tbaa !9
  %40 = add nsw i32 %39, 15
  %41 = sext i32 %40 to i64
  %42 = getelementptr inbounds i64, ptr %38, i64 %41
  %43 = load i64, ptr %42, align 8, !tbaa !11
  %44 = xor i64 %37, %43
  %45 = load ptr, ptr %2, align 8, !tbaa !5
  %46 = load i32, ptr %6, align 4, !tbaa !9
  %47 = add nsw i32 %46, 20
  %48 = sext i32 %47 to i64
  %49 = getelementptr inbounds i64, ptr %45, i64 %48
  %50 = load i64, ptr %49, align 8, !tbaa !11
  %51 = xor i64 %44, %50
  %52 = load i32, ptr %6, align 4, !tbaa !9
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds [5 x i64], ptr %10, i64 0, i64 %53
  store i64 %51, ptr %54, align 8, !tbaa !11
  br label %55

55:                                               ; preds = %18
  %56 = load i32, ptr %6, align 4, !tbaa !9
  %57 = add nsw i32 %56, 1
  store i32 %57, ptr %6, align 4, !tbaa !9
  br label %15, !llvm.loop !13

58:                                               ; preds = %15
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %59

59:                                               ; preds = %102, %58
  %60 = load i32, ptr %6, align 4, !tbaa !9
  %61 = icmp slt i32 %60, 5
  br i1 %61, label %62, label %105

62:                                               ; preds = %59
  %63 = load i32, ptr %6, align 4, !tbaa !9
  %64 = add nsw i32 %63, 4
  %65 = srem i32 %64, 5
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds [5 x i64], ptr %10, i64 0, i64 %66
  %68 = load i64, ptr %67, align 8, !tbaa !11
  %69 = load i32, ptr %6, align 4, !tbaa !9
  %70 = add nsw i32 %69, 1
  %71 = srem i32 %70, 5
  %72 = sext i32 %71 to i64
  %73 = getelementptr inbounds [5 x i64], ptr %10, i64 0, i64 %72
  %74 = load i64, ptr %73, align 8, !tbaa !11
  %75 = shl i64 %74, 1
  %76 = load i32, ptr %6, align 4, !tbaa !9
  %77 = add nsw i32 %76, 1
  %78 = srem i32 %77, 5
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds [5 x i64], ptr %10, i64 0, i64 %79
  %81 = load i64, ptr %80, align 8, !tbaa !11
  %82 = lshr i64 %81, 63
  %83 = or i64 %75, %82
  %84 = xor i64 %68, %83
  store i64 %84, ptr %9, align 8, !tbaa !11
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %85

85:                                               ; preds = %98, %62
  %86 = load i32, ptr %7, align 4, !tbaa !9
  %87 = icmp slt i32 %86, 25
  br i1 %87, label %88, label %101

88:                                               ; preds = %85
  %89 = load i64, ptr %9, align 8, !tbaa !11
  %90 = load ptr, ptr %2, align 8, !tbaa !5
  %91 = load i32, ptr %7, align 4, !tbaa !9
  %92 = load i32, ptr %6, align 4, !tbaa !9
  %93 = add nsw i32 %91, %92
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds i64, ptr %90, i64 %94
  %96 = load i64, ptr %95, align 8, !tbaa !11
  %97 = xor i64 %96, %89
  store i64 %97, ptr %95, align 8, !tbaa !11
  br label %98

98:                                               ; preds = %88
  %99 = load i32, ptr %7, align 4, !tbaa !9
  %100 = add nsw i32 %99, 5
  store i32 %100, ptr %7, align 4, !tbaa !9
  br label %85, !llvm.loop !15

101:                                              ; preds = %85
  br label %102

102:                                              ; preds = %101
  %103 = load i32, ptr %6, align 4, !tbaa !9
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %6, align 4, !tbaa !9
  br label %59, !llvm.loop !16

105:                                              ; preds = %59
  %106 = load ptr, ptr %2, align 8, !tbaa !5
  %107 = getelementptr inbounds i64, ptr %106, i64 1
  %108 = load i64, ptr %107, align 8, !tbaa !11
  store i64 %108, ptr %9, align 8, !tbaa !11
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %109

109:                                              ; preds = %145, %105
  %110 = load i32, ptr %6, align 4, !tbaa !9
  %111 = icmp slt i32 %110, 24
  br i1 %111, label %112, label %148

112:                                              ; preds = %109
  %113 = load i32, ptr %6, align 4, !tbaa !9
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds [24 x i32], ptr %5, i64 0, i64 %114
  %116 = load i32, ptr %115, align 4, !tbaa !9
  store i32 %116, ptr %7, align 4, !tbaa !9
  %117 = load ptr, ptr %2, align 8, !tbaa !5
  %118 = load i32, ptr %7, align 4, !tbaa !9
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds i64, ptr %117, i64 %119
  %121 = load i64, ptr %120, align 8, !tbaa !11
  %122 = getelementptr inbounds [5 x i64], ptr %10, i64 0, i64 0
  store i64 %121, ptr %122, align 16, !tbaa !11
  %123 = load i64, ptr %9, align 8, !tbaa !11
  %124 = load i32, ptr %6, align 4, !tbaa !9
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds [24 x i32], ptr %4, i64 0, i64 %125
  %127 = load i32, ptr %126, align 4, !tbaa !9
  %128 = zext i32 %127 to i64
  %129 = shl i64 %123, %128
  %130 = load i64, ptr %9, align 8, !tbaa !11
  %131 = load i32, ptr %6, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds [24 x i32], ptr %4, i64 0, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !9
  %135 = sub nsw i32 64, %134
  %136 = zext i32 %135 to i64
  %137 = lshr i64 %130, %136
  %138 = or i64 %129, %137
  %139 = load ptr, ptr %2, align 8, !tbaa !5
  %140 = load i32, ptr %7, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds i64, ptr %139, i64 %141
  store i64 %138, ptr %142, align 8, !tbaa !11
  %143 = getelementptr inbounds [5 x i64], ptr %10, i64 0, i64 0
  %144 = load i64, ptr %143, align 16, !tbaa !11
  store i64 %144, ptr %9, align 8, !tbaa !11
  br label %145

145:                                              ; preds = %112
  %146 = load i32, ptr %6, align 4, !tbaa !9
  %147 = add nsw i32 %146, 1
  store i32 %147, ptr %6, align 4, !tbaa !9
  br label %109, !llvm.loop !17

148:                                              ; preds = %109
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %149

149:                                              ; preds = %201, %148
  %150 = load i32, ptr %7, align 4, !tbaa !9
  %151 = icmp slt i32 %150, 25
  br i1 %151, label %152, label %204

152:                                              ; preds = %149
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %167, %152
  %154 = load i32, ptr %6, align 4, !tbaa !9
  %155 = icmp slt i32 %154, 5
  br i1 %155, label %156, label %170

156:                                              ; preds = %153
  %157 = load ptr, ptr %2, align 8, !tbaa !5
  %158 = load i32, ptr %7, align 4, !tbaa !9
  %159 = load i32, ptr %6, align 4, !tbaa !9
  %160 = add nsw i32 %158, %159
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds i64, ptr %157, i64 %161
  %163 = load i64, ptr %162, align 8, !tbaa !11
  %164 = load i32, ptr %6, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds [5 x i64], ptr %10, i64 0, i64 %165
  store i64 %163, ptr %166, align 8, !tbaa !11
  br label %167

167:                                              ; preds = %156
  %168 = load i32, ptr %6, align 4, !tbaa !9
  %169 = add nsw i32 %168, 1
  store i32 %169, ptr %6, align 4, !tbaa !9
  br label %153, !llvm.loop !18

170:                                              ; preds = %153
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %171

171:                                              ; preds = %197, %170
  %172 = load i32, ptr %6, align 4, !tbaa !9
  %173 = icmp slt i32 %172, 5
  br i1 %173, label %174, label %200

174:                                              ; preds = %171
  %175 = load i32, ptr %6, align 4, !tbaa !9
  %176 = add nsw i32 %175, 1
  %177 = srem i32 %176, 5
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [5 x i64], ptr %10, i64 0, i64 %178
  %180 = load i64, ptr %179, align 8, !tbaa !11
  %181 = xor i64 %180, -1
  %182 = load i32, ptr %6, align 4, !tbaa !9
  %183 = add nsw i32 %182, 2
  %184 = srem i32 %183, 5
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds [5 x i64], ptr %10, i64 0, i64 %185
  %187 = load i64, ptr %186, align 8, !tbaa !11
  %188 = and i64 %181, %187
  %189 = load ptr, ptr %2, align 8, !tbaa !5
  %190 = load i32, ptr %7, align 4, !tbaa !9
  %191 = load i32, ptr %6, align 4, !tbaa !9
  %192 = add nsw i32 %190, %191
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i64, ptr %189, i64 %193
  %195 = load i64, ptr %194, align 8, !tbaa !11
  %196 = xor i64 %195, %188
  store i64 %196, ptr %194, align 8, !tbaa !11
  br label %197

197:                                              ; preds = %174
  %198 = load i32, ptr %6, align 4, !tbaa !9
  %199 = add nsw i32 %198, 1
  store i32 %199, ptr %6, align 4, !tbaa !9
  br label %171, !llvm.loop !19

200:                                              ; preds = %171
  br label %201

201:                                              ; preds = %200
  %202 = load i32, ptr %7, align 4, !tbaa !9
  %203 = add nsw i32 %202, 5
  store i32 %203, ptr %7, align 4, !tbaa !9
  br label %149, !llvm.loop !20

204:                                              ; preds = %149
  %205 = load i32, ptr %8, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds [24 x i64], ptr %3, i64 0, i64 %206
  %208 = load i64, ptr %207, align 8, !tbaa !11
  %209 = load ptr, ptr %2, align 8, !tbaa !5
  %210 = getelementptr inbounds i64, ptr %209, i64 0
  %211 = load i64, ptr %210, align 8, !tbaa !11
  %212 = xor i64 %211, %208
  store i64 %212, ptr %210, align 8, !tbaa !11
  br label %213

213:                                              ; preds = %204
  %214 = load i32, ptr %8, align 4, !tbaa !9
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr %8, align 4, !tbaa !9
  br label %11, !llvm.loop !21

216:                                              ; preds = %11
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr %4) #3
  call void @llvm.lifetime.end.p0(i64 192, ptr %3) #3
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@__const.sha3_keccakf.keccakf_rndc = external hidden unnamed_addr constant [24 x i64], align 16
@__const.sha3_keccakf.keccakf_rotc = external hidden unnamed_addr constant [24 x i32], align 16
@__const.sha3_keccakf.keccakf_piln = external hidden unnamed_addr constant [24 x i32], align 16

; Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable
define dso_local void @sha3_keccakf(ptr nocapture noundef %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 8
  %.pre = load i64, ptr %0, align 8, !tbaa !5
  %.phi.trans.insert = getelementptr i8, ptr %0, i64 120
  %.pre159 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !5
  %.phi.trans.insert160 = getelementptr i8, ptr %0, i64 160
  %.pre161 = load i64, ptr %.phi.trans.insert160, align 8, !tbaa !5
  %.phi.trans.insert162 = getelementptr inbounds i8, ptr %0, i64 128
  %.pre163 = load i64, ptr %.phi.trans.insert162, align 8, !tbaa !5
  %.phi.trans.insert164 = getelementptr inbounds i8, ptr %0, i64 168
  %.pre165 = load i64, ptr %.phi.trans.insert164, align 8, !tbaa !5
  %.phi.trans.insert166 = getelementptr inbounds i8, ptr %0, i64 16
  %.phi.trans.insert167 = getelementptr inbounds i8, ptr %0, i64 136
  %.pre168 = load i64, ptr %.phi.trans.insert167, align 8, !tbaa !5
  %.phi.trans.insert170 = getelementptr inbounds i8, ptr %0, i64 176
  %.pre171 = load i64, ptr %.phi.trans.insert170, align 8, !tbaa !5
  %.phi.trans.insert172 = getelementptr inbounds i8, ptr %0, i64 24
  %.phi.trans.insert173 = getelementptr inbounds i8, ptr %0, i64 104
  %.pre174 = load i64, ptr %.phi.trans.insert173, align 8, !tbaa !5
  %.phi.trans.insert176 = getelementptr inbounds i8, ptr %0, i64 144
  %.pre177 = load i64, ptr %.phi.trans.insert176, align 8, !tbaa !5
  %.phi.trans.insert179 = getelementptr inbounds i8, ptr %0, i64 184
  %.pre180 = load i64, ptr %.phi.trans.insert179, align 8, !tbaa !5
  %.phi.trans.insert181 = getelementptr inbounds i8, ptr %0, i64 32
  %.phi.trans.insert182 = getelementptr inbounds i8, ptr %0, i64 112
  %.pre183 = load i64, ptr %.phi.trans.insert182, align 8, !tbaa !5
  %.phi.trans.insert185 = getelementptr inbounds i8, ptr %0, i64 152
  %.pre186 = load i64, ptr %.phi.trans.insert185, align 8, !tbaa !5
  %.phi.trans.insert188 = getelementptr inbounds i8, ptr %0, i64 192
  %.pre189 = load i64, ptr %.phi.trans.insert188, align 8, !tbaa !5
  %.phi.trans.insert190 = getelementptr i8, ptr %0, i64 80
  %.pre191 = load i64, ptr %.phi.trans.insert190, align 8, !tbaa !5
  %3 = getelementptr i8, ptr %0, i64 40
  %4 = getelementptr inbounds i8, ptr %0, i64 48
  %5 = getelementptr inbounds i8, ptr %0, i64 88
  %6 = getelementptr inbounds i8, ptr %0, i64 56
  %7 = getelementptr inbounds i8, ptr %0, i64 96
  %8 = getelementptr inbounds i8, ptr %0, i64 64
  %9 = getelementptr inbounds i8, ptr %0, i64 72
  %10 = getelementptr inbounds i8, ptr %0, i64 48
  %11 = getelementptr inbounds i8, ptr %0, i64 88
  %12 = getelementptr inbounds i8, ptr %0, i64 128
  %13 = getelementptr inbounds i8, ptr %0, i64 168
  %14 = getelementptr inbounds i8, ptr %0, i64 56
  %15 = getelementptr inbounds i8, ptr %0, i64 96
  %16 = getelementptr inbounds i8, ptr %0, i64 136
  %17 = getelementptr inbounds i8, ptr %0, i64 176
  %18 = getelementptr inbounds i8, ptr %0, i64 64
  %19 = getelementptr inbounds i8, ptr %0, i64 104
  %20 = getelementptr inbounds i8, ptr %0, i64 144
  %21 = getelementptr inbounds i8, ptr %0, i64 184
  %22 = getelementptr inbounds i8, ptr %0, i64 72
  %23 = getelementptr inbounds i8, ptr %0, i64 112
  %24 = getelementptr inbounds i8, ptr %0, i64 152
  %25 = getelementptr inbounds i8, ptr %0, i64 192
  %26 = load i32, ptr @__const.sha3_keccakf.keccakf_piln, align 16, !tbaa !9
  %27 = sext i32 %26 to i64
  %28 = getelementptr inbounds i64, ptr %0, i64 %27
  %29 = load i32, ptr @__const.sha3_keccakf.keccakf_rotc, align 16, !tbaa !9
  %30 = zext nneg i32 %29 to i64
  %31 = sub nsw i32 64, %29
  %32 = zext nneg i32 %31 to i64
  %33 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 4), align 4, !tbaa !9
  %34 = sext i32 %33 to i64
  %35 = getelementptr inbounds i64, ptr %0, i64 %34
  %36 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 4), align 4, !tbaa !9
  %37 = zext nneg i32 %36 to i64
  %38 = sub nsw i32 64, %36
  %39 = zext nneg i32 %38 to i64
  %40 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 8), align 8, !tbaa !9
  %41 = sext i32 %40 to i64
  %42 = getelementptr inbounds i64, ptr %0, i64 %41
  %43 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 8), align 8, !tbaa !9
  %44 = zext nneg i32 %43 to i64
  %45 = sub nsw i32 64, %43
  %46 = zext nneg i32 %45 to i64
  %47 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 12), align 4, !tbaa !9
  %48 = sext i32 %47 to i64
  %49 = getelementptr inbounds i64, ptr %0, i64 %48
  %50 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 12), align 4, !tbaa !9
  %51 = zext nneg i32 %50 to i64
  %52 = sub nsw i32 64, %50
  %53 = zext nneg i32 %52 to i64
  %54 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 16), align 16, !tbaa !9
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds i64, ptr %0, i64 %55
  %57 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 16), align 16, !tbaa !9
  %58 = zext nneg i32 %57 to i64
  %59 = sub nsw i32 64, %57
  %60 = zext nneg i32 %59 to i64
  %61 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 20), align 4, !tbaa !9
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds i64, ptr %0, i64 %62
  %64 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 20), align 4, !tbaa !9
  %65 = zext nneg i32 %64 to i64
  %66 = sub nsw i32 64, %64
  %67 = zext nneg i32 %66 to i64
  %68 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 24), align 8, !tbaa !9
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds i64, ptr %0, i64 %69
  %71 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 24), align 8, !tbaa !9
  %72 = zext nneg i32 %71 to i64
  %73 = sub nsw i32 64, %71
  %74 = zext nneg i32 %73 to i64
  %75 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 28), align 4, !tbaa !9
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds i64, ptr %0, i64 %76
  %78 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 28), align 4, !tbaa !9
  %79 = zext nneg i32 %78 to i64
  %80 = sub nsw i32 64, %78
  %81 = zext nneg i32 %80 to i64
  %82 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 32), align 16, !tbaa !9
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds i64, ptr %0, i64 %83
  %85 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 32), align 16, !tbaa !9
  %86 = zext nneg i32 %85 to i64
  %87 = sub nsw i32 64, %85
  %88 = zext nneg i32 %87 to i64
  %89 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 36), align 4, !tbaa !9
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds i64, ptr %0, i64 %90
  %92 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 36), align 4, !tbaa !9
  %93 = zext nneg i32 %92 to i64
  %94 = sub nsw i32 64, %92
  %95 = zext nneg i32 %94 to i64
  %96 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 40), align 8, !tbaa !9
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds i64, ptr %0, i64 %97
  %99 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 40), align 8, !tbaa !9
  %100 = zext nneg i32 %99 to i64
  %101 = sub nsw i32 64, %99
  %102 = zext nneg i32 %101 to i64
  %103 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 44), align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds i64, ptr %0, i64 %104
  %106 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 44), align 4, !tbaa !9
  %107 = zext nneg i32 %106 to i64
  %108 = sub nsw i32 64, %106
  %109 = zext nneg i32 %108 to i64
  %110 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 48), align 16, !tbaa !9
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds i64, ptr %0, i64 %111
  %113 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 48), align 16, !tbaa !9
  %114 = zext nneg i32 %113 to i64
  %115 = sub nsw i32 64, %113
  %116 = zext nneg i32 %115 to i64
  %117 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 52), align 4, !tbaa !9
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds i64, ptr %0, i64 %118
  %120 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 52), align 4, !tbaa !9
  %121 = zext nneg i32 %120 to i64
  %122 = sub nsw i32 64, %120
  %123 = zext nneg i32 %122 to i64
  %124 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 56), align 8, !tbaa !9
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds i64, ptr %0, i64 %125
  %127 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 56), align 8, !tbaa !9
  %128 = zext nneg i32 %127 to i64
  %129 = sub nsw i32 64, %127
  %130 = zext nneg i32 %129 to i64
  %131 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 60), align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds i64, ptr %0, i64 %132
  %134 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 60), align 4, !tbaa !9
  %135 = zext nneg i32 %134 to i64
  %136 = sub nsw i32 64, %134
  %137 = zext nneg i32 %136 to i64
  %138 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 64), align 16, !tbaa !9
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds i64, ptr %0, i64 %139
  %141 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 64), align 16, !tbaa !9
  %142 = zext nneg i32 %141 to i64
  %143 = sub nsw i32 64, %141
  %144 = zext nneg i32 %143 to i64
  %145 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 68), align 4, !tbaa !9
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds i64, ptr %0, i64 %146
  %148 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 68), align 4, !tbaa !9
  %149 = zext nneg i32 %148 to i64
  %150 = sub nsw i32 64, %148
  %151 = zext nneg i32 %150 to i64
  %152 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 72), align 8, !tbaa !9
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i64, ptr %0, i64 %153
  %155 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 72), align 8, !tbaa !9
  %156 = zext nneg i32 %155 to i64
  %157 = sub nsw i32 64, %155
  %158 = zext nneg i32 %157 to i64
  %159 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 76), align 4, !tbaa !9
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds i64, ptr %0, i64 %160
  %162 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 76), align 4, !tbaa !9
  %163 = zext nneg i32 %162 to i64
  %164 = sub nsw i32 64, %162
  %165 = zext nneg i32 %164 to i64
  %166 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 80), align 16, !tbaa !9
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds i64, ptr %0, i64 %167
  %169 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 80), align 16, !tbaa !9
  %170 = zext nneg i32 %169 to i64
  %171 = sub nsw i32 64, %169
  %172 = zext nneg i32 %171 to i64
  %173 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 84), align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds i64, ptr %0, i64 %174
  %176 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 84), align 4, !tbaa !9
  %177 = zext nneg i32 %176 to i64
  %178 = sub nsw i32 64, %176
  %179 = zext nneg i32 %178 to i64
  %180 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 88), align 8, !tbaa !9
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i64, ptr %0, i64 %181
  %183 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 88), align 8, !tbaa !9
  %184 = zext nneg i32 %183 to i64
  %185 = sub nsw i32 64, %183
  %186 = zext nneg i32 %185 to i64
  %187 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_piln, i64 92), align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i64, ptr %0, i64 %188
  %190 = load i32, ptr getelementptr inbounds (i8, ptr @__const.sha3_keccakf.keccakf_rotc, i64 92), align 4, !tbaa !9
  %191 = zext nneg i32 %190 to i64
  %192 = sub nsw i32 64, %190
  %193 = zext nneg i32 %192 to i64
  %.sroa.67.0.scevgep.1.sroa_idx = getelementptr i8, ptr %0, i64 48
  %.sroa.80.0.scevgep.1.sroa_idx = getelementptr i8, ptr %0, i64 56
  %.sroa.93.0.scevgep.1.sroa_idx = getelementptr i8, ptr %0, i64 64
  %.sroa.106.0.scevgep.1.sroa_idx = getelementptr i8, ptr %0, i64 72
  %.sroa.67.0.scevgep.2.sroa_idx = getelementptr i8, ptr %0, i64 88
  %.sroa.80.0.scevgep.2.sroa_idx = getelementptr i8, ptr %0, i64 96
  %.sroa.93.0.scevgep.2.sroa_idx = getelementptr i8, ptr %0, i64 104
  %.sroa.106.0.scevgep.2.sroa_idx = getelementptr i8, ptr %0, i64 112
  %.sroa.67.0.scevgep.3.sroa_idx = getelementptr i8, ptr %0, i64 128
  %.sroa.80.0.scevgep.3.sroa_idx = getelementptr i8, ptr %0, i64 136
  %.sroa.93.0.scevgep.3.sroa_idx = getelementptr i8, ptr %0, i64 144
  %.sroa.106.0.scevgep.3.sroa_idx = getelementptr i8, ptr %0, i64 152
  %.sroa.67.0.scevgep.4.sroa_idx = getelementptr i8, ptr %0, i64 168
  %.sroa.80.0.scevgep.4.sroa_idx = getelementptr i8, ptr %0, i64 176
  %.sroa.93.0.scevgep.4.sroa_idx = getelementptr i8, ptr %0, i64 184
  %.sroa.106.0.scevgep.4.sroa_idx = getelementptr i8, ptr %0, i64 192
  br label %.preheader64

.preheader64:                                     ; preds = %1, %.preheader64
  %194 = phi i64 [ %.pre191, %1 ], [ %407, %.preheader64 ]
  %195 = phi i64 [ %.pre189, %1 ], [ %449, %.preheader64 ]
  %196 = phi i64 [ %.pre186, %1 ], [ %434, %.preheader64 ]
  %197 = phi i64 [ %.pre183, %1 ], [ %419, %.preheader64 ]
  %198 = phi i64 [ %.pre180, %1 ], [ %446, %.preheader64 ]
  %199 = phi i64 [ %.pre177, %1 ], [ %431, %.preheader64 ]
  %200 = phi i64 [ %.pre174, %1 ], [ %416, %.preheader64 ]
  %201 = phi i64 [ %.pre171, %1 ], [ %443, %.preheader64 ]
  %202 = phi i64 [ %.pre168, %1 ], [ %428, %.preheader64 ]
  %203 = phi i64 [ %.pre165, %1 ], [ %440, %.preheader64 ]
  %204 = phi i64 [ %.pre163, %1 ], [ %425, %.preheader64 ]
  %205 = phi i64 [ %.pre161, %1 ], [ %437, %.preheader64 ]
  %206 = phi i64 [ %.pre159, %1 ], [ %422, %.preheader64 ]
  %207 = phi i64 [ %.pre, %1 ], [ %453, %.preheader64 ]
  %indvars.iv = phi i64 [ 0, %1 ], [ %indvars.iv.next, %.preheader64 ]
  %208 = load i64, ptr %3, align 8, !tbaa !5
  %209 = xor i64 %208, %207
  %210 = xor i64 %209, %194
  %211 = xor i64 %210, %206
  %212 = xor i64 %211, %205
  %213 = load i64, ptr %2, align 8, !tbaa !5
  %214 = load i64, ptr %4, align 8, !tbaa !5
  %215 = xor i64 %214, %213
  %216 = load i64, ptr %5, align 8, !tbaa !5
  %217 = xor i64 %215, %216
  %218 = xor i64 %217, %204
  %219 = xor i64 %218, %203
  %220 = load i64, ptr %.phi.trans.insert166, align 8, !tbaa !5
  %221 = load i64, ptr %6, align 8, !tbaa !5
  %222 = load i64, ptr %7, align 8, !tbaa !5
  %223 = xor i64 %202, %201
  %224 = xor i64 %223, %220
  %225 = xor i64 %224, %221
  %226 = xor i64 %225, %222
  %227 = load i64, ptr %.phi.trans.insert172, align 8, !tbaa !5
  %228 = load i64, ptr %8, align 8, !tbaa !5
  %229 = xor i64 %200, %199
  %230 = xor i64 %229, %198
  %231 = xor i64 %230, %227
  %232 = xor i64 %231, %228
  %233 = load i64, ptr %.phi.trans.insert181, align 8, !tbaa !5
  %234 = load i64, ptr %9, align 8, !tbaa !5
  %235 = xor i64 %197, %196
  %236 = xor i64 %235, %195
  %237 = xor i64 %236, %233
  %238 = xor i64 %237, %234
  %239 = tail call i64 @llvm.fshl.i64(i64 %219, i64 %219, i64 1)
  %240 = xor i64 %239, %238
  %241 = xor i64 %240, %207
  store i64 %241, ptr %0, align 8, !tbaa !5
  %242 = xor i64 %240, %208
  store i64 %242, ptr %3, align 8, !tbaa !5
  %243 = xor i64 %240, %194
  store i64 %243, ptr %.phi.trans.insert190, align 8, !tbaa !5
  %244 = xor i64 %240, %206
  store i64 %244, ptr %.phi.trans.insert, align 8, !tbaa !5
  %245 = xor i64 %240, %205
  store i64 %245, ptr %.phi.trans.insert160, align 8, !tbaa !5
  %246 = tail call i64 @llvm.fshl.i64(i64 %226, i64 %226, i64 1)
  %247 = xor i64 %246, %212
  %248 = xor i64 %247, %213
  store i64 %248, ptr %2, align 8, !tbaa !5
  %249 = xor i64 %247, %214
  store i64 %249, ptr %10, align 8, !tbaa !5
  %250 = xor i64 %247, %216
  store i64 %250, ptr %11, align 8, !tbaa !5
  %251 = xor i64 %247, %204
  store i64 %251, ptr %12, align 8, !tbaa !5
  %252 = xor i64 %247, %203
  store i64 %252, ptr %13, align 8, !tbaa !5
  %253 = tail call i64 @llvm.fshl.i64(i64 %232, i64 %232, i64 1)
  %254 = xor i64 %253, %219
  %255 = xor i64 %254, %220
  store i64 %255, ptr %.phi.trans.insert166, align 8, !tbaa !5
  %256 = xor i64 %254, %221
  store i64 %256, ptr %14, align 8, !tbaa !5
  %257 = xor i64 %254, %222
  store i64 %257, ptr %15, align 8, !tbaa !5
  %258 = load i64, ptr %16, align 8, !tbaa !5
  %259 = xor i64 %254, %258
  store i64 %259, ptr %16, align 8, !tbaa !5
  %260 = load i64, ptr %17, align 8, !tbaa !5
  %261 = xor i64 %254, %260
  store i64 %261, ptr %17, align 8, !tbaa !5
  %262 = tail call i64 @llvm.fshl.i64(i64 %238, i64 %238, i64 1)
  %263 = xor i64 %262, %226
  %264 = xor i64 %263, %227
  store i64 %264, ptr %.phi.trans.insert172, align 8, !tbaa !5
  %265 = xor i64 %263, %228
  store i64 %265, ptr %18, align 8, !tbaa !5
  %266 = load i64, ptr %19, align 8, !tbaa !5
  %267 = xor i64 %263, %266
  store i64 %267, ptr %19, align 8, !tbaa !5
  %268 = load i64, ptr %20, align 8, !tbaa !5
  %269 = xor i64 %263, %268
  store i64 %269, ptr %20, align 8, !tbaa !5
  %270 = load i64, ptr %21, align 8, !tbaa !5
  %271 = xor i64 %263, %270
  store i64 %271, ptr %21, align 8, !tbaa !5
  %272 = tail call i64 @llvm.fshl.i64(i64 %212, i64 %212, i64 1)
  %273 = xor i64 %272, %232
  %274 = xor i64 %273, %233
  store i64 %274, ptr %.phi.trans.insert181, align 8, !tbaa !5
  %275 = xor i64 %273, %234
  store i64 %275, ptr %22, align 8, !tbaa !5
  %276 = load i64, ptr %23, align 8, !tbaa !5
  %277 = xor i64 %273, %276
  store i64 %277, ptr %23, align 8, !tbaa !5
  %278 = load i64, ptr %24, align 8, !tbaa !5
  %279 = xor i64 %273, %278
  store i64 %279, ptr %24, align 8, !tbaa !5
  %280 = load i64, ptr %25, align 8, !tbaa !5
  %281 = xor i64 %273, %280
  store i64 %281, ptr %25, align 8, !tbaa !5
  %282 = load i64, ptr %28, align 8, !tbaa !5
  %283 = shl i64 %248, %30
  %284 = lshr i64 %248, %32
  %285 = or i64 %284, %283
  store i64 %285, ptr %28, align 8, !tbaa !5
  %286 = load i64, ptr %35, align 8, !tbaa !5
  %287 = shl i64 %282, %37
  %288 = lshr i64 %282, %39
  %289 = or i64 %288, %287
  store i64 %289, ptr %35, align 8, !tbaa !5
  %290 = load i64, ptr %42, align 8, !tbaa !5
  %291 = shl i64 %286, %44
  %292 = lshr i64 %286, %46
  %293 = or i64 %292, %291
  store i64 %293, ptr %42, align 8, !tbaa !5
  %294 = load i64, ptr %49, align 8, !tbaa !5
  %295 = shl i64 %290, %51
  %296 = lshr i64 %290, %53
  %297 = or i64 %296, %295
  store i64 %297, ptr %49, align 8, !tbaa !5
  %298 = load i64, ptr %56, align 8, !tbaa !5
  %299 = shl i64 %294, %58
  %300 = lshr i64 %294, %60
  %301 = or i64 %300, %299
  store i64 %301, ptr %56, align 8, !tbaa !5
  %302 = load i64, ptr %63, align 8, !tbaa !5
  %303 = shl i64 %298, %65
  %304 = lshr i64 %298, %67
  %305 = or i64 %304, %303
  store i64 %305, ptr %63, align 8, !tbaa !5
  %306 = load i64, ptr %70, align 8, !tbaa !5
  %307 = shl i64 %302, %72
  %308 = lshr i64 %302, %74
  %309 = or i64 %308, %307
  store i64 %309, ptr %70, align 8, !tbaa !5
  %310 = load i64, ptr %77, align 8, !tbaa !5
  %311 = shl i64 %306, %79
  %312 = lshr i64 %306, %81
  %313 = or i64 %312, %311
  store i64 %313, ptr %77, align 8, !tbaa !5
  %314 = load i64, ptr %84, align 8, !tbaa !5
  %315 = shl i64 %310, %86
  %316 = lshr i64 %310, %88
  %317 = or i64 %316, %315
  store i64 %317, ptr %84, align 8, !tbaa !5
  %318 = load i64, ptr %91, align 8, !tbaa !5
  %319 = shl i64 %314, %93
  %320 = lshr i64 %314, %95
  %321 = or i64 %320, %319
  store i64 %321, ptr %91, align 8, !tbaa !5
  %322 = load i64, ptr %98, align 8, !tbaa !5
  %323 = shl i64 %318, %100
  %324 = lshr i64 %318, %102
  %325 = or i64 %324, %323
  store i64 %325, ptr %98, align 8, !tbaa !5
  %326 = load i64, ptr %105, align 8, !tbaa !5
  %327 = shl i64 %322, %107
  %328 = lshr i64 %322, %109
  %329 = or i64 %328, %327
  store i64 %329, ptr %105, align 8, !tbaa !5
  %330 = load i64, ptr %112, align 8, !tbaa !5
  %331 = shl i64 %326, %114
  %332 = lshr i64 %326, %116
  %333 = or i64 %332, %331
  store i64 %333, ptr %112, align 8, !tbaa !5
  %334 = load i64, ptr %119, align 8, !tbaa !5
  %335 = shl i64 %330, %121
  %336 = lshr i64 %330, %123
  %337 = or i64 %336, %335
  store i64 %337, ptr %119, align 8, !tbaa !5
  %338 = load i64, ptr %126, align 8, !tbaa !5
  %339 = shl i64 %334, %128
  %340 = lshr i64 %334, %130
  %341 = or i64 %340, %339
  store i64 %341, ptr %126, align 8, !tbaa !5
  %342 = load i64, ptr %133, align 8, !tbaa !5
  %343 = shl i64 %338, %135
  %344 = lshr i64 %338, %137
  %345 = or i64 %344, %343
  store i64 %345, ptr %133, align 8, !tbaa !5
  %346 = load i64, ptr %140, align 8, !tbaa !5
  %347 = shl i64 %342, %142
  %348 = lshr i64 %342, %144
  %349 = or i64 %348, %347
  store i64 %349, ptr %140, align 8, !tbaa !5
  %350 = load i64, ptr %147, align 8, !tbaa !5
  %351 = shl i64 %346, %149
  %352 = lshr i64 %346, %151
  %353 = or i64 %352, %351
  store i64 %353, ptr %147, align 8, !tbaa !5
  %354 = load i64, ptr %154, align 8, !tbaa !5
  %355 = shl i64 %350, %156
  %356 = lshr i64 %350, %158
  %357 = or i64 %356, %355
  store i64 %357, ptr %154, align 8, !tbaa !5
  %358 = load i64, ptr %161, align 8, !tbaa !5
  %359 = shl i64 %354, %163
  %360 = lshr i64 %354, %165
  %361 = or i64 %360, %359
  store i64 %361, ptr %161, align 8, !tbaa !5
  %362 = load i64, ptr %168, align 8, !tbaa !5
  %363 = shl i64 %358, %170
  %364 = lshr i64 %358, %172
  %365 = or i64 %364, %363
  store i64 %365, ptr %168, align 8, !tbaa !5
  %366 = load i64, ptr %175, align 8, !tbaa !5
  %367 = shl i64 %362, %177
  %368 = lshr i64 %362, %179
  %369 = or i64 %368, %367
  store i64 %369, ptr %175, align 8, !tbaa !5
  %370 = load i64, ptr %182, align 8, !tbaa !5
  %371 = shl i64 %366, %184
  %372 = lshr i64 %366, %186
  %373 = or i64 %372, %371
  store i64 %373, ptr %182, align 8, !tbaa !5
  %374 = shl i64 %370, %191
  %375 = lshr i64 %370, %193
  %376 = or i64 %375, %374
  store i64 %376, ptr %189, align 8, !tbaa !5
  %.sroa.106.0.copyload = load i64, ptr %.phi.trans.insert181, align 8, !tbaa !5
  %377 = load <4 x i64>, ptr %0, align 8, !tbaa !5
  %378 = shufflevector <4 x i64> %377, <4 x i64> poison, <4 x i32> <i32 1, i32 2, i32 3, i32 poison>
  %379 = insertelement <4 x i64> %378, i64 %.sroa.106.0.copyload, i64 3
  %380 = xor <4 x i64> %379, <i64 -1, i64 -1, i64 -1, i64 -1>
  %381 = shufflevector <4 x i64> %377, <4 x i64> poison, <4 x i32> <i32 2, i32 3, i32 poison, i32 0>
  %382 = insertelement <4 x i64> %381, i64 %.sroa.106.0.copyload, i64 2
  %383 = and <4 x i64> %382, %380
  %384 = xor <4 x i64> %377, %383
  store <4 x i64> %384, ptr %0, align 8, !tbaa !5
  %385 = extractelement <4 x i64> %377, i64 0
  %386 = xor i64 %385, -1
  %387 = extractelement <4 x i64> %377, i64 1
  %388 = and i64 %387, %386
  %389 = xor i64 %.sroa.106.0.copyload, %388
  store i64 %389, ptr %.phi.trans.insert181, align 8, !tbaa !5
  %.sroa.0.0.copyload95 = load i64, ptr %3, align 8, !tbaa !5
  %.sroa.67.0.copyload99 = load i64, ptr %.sroa.67.0.scevgep.1.sroa_idx, align 8, !tbaa !5
  %.sroa.80.0.copyload114 = load i64, ptr %.sroa.80.0.scevgep.1.sroa_idx, align 8, !tbaa !5
  %.sroa.93.0.copyload129 = load i64, ptr %.sroa.93.0.scevgep.1.sroa_idx, align 8, !tbaa !5
  %.sroa.106.0.copyload144 = load i64, ptr %.sroa.106.0.scevgep.1.sroa_idx, align 8, !tbaa !5
  %390 = xor i64 %.sroa.67.0.copyload99, -1
  %391 = and i64 %.sroa.80.0.copyload114, %390
  %392 = xor i64 %.sroa.0.0.copyload95, %391
  store i64 %392, ptr %3, align 8, !tbaa !5
  %393 = xor i64 %.sroa.80.0.copyload114, -1
  %394 = and i64 %.sroa.93.0.copyload129, %393
  %395 = xor i64 %.sroa.67.0.copyload99, %394
  store i64 %395, ptr %10, align 8, !tbaa !5
  %396 = xor i64 %.sroa.93.0.copyload129, -1
  %397 = and i64 %.sroa.106.0.copyload144, %396
  %398 = xor i64 %.sroa.80.0.copyload114, %397
  store i64 %398, ptr %14, align 8, !tbaa !5
  %399 = xor i64 %.sroa.106.0.copyload144, -1
  %400 = and i64 %.sroa.0.0.copyload95, %399
  %401 = xor i64 %.sroa.93.0.copyload129, %400
  store i64 %401, ptr %18, align 8, !tbaa !5
  %402 = xor i64 %.sroa.0.0.copyload95, -1
  %403 = and i64 %.sroa.67.0.copyload99, %402
  %404 = xor i64 %.sroa.106.0.copyload144, %403
  store i64 %404, ptr %22, align 8, !tbaa !5
  %.sroa.0.0.copyload96 = load i64, ptr %.phi.trans.insert190, align 8, !tbaa !5
  %.sroa.67.0.copyload100 = load i64, ptr %.sroa.67.0.scevgep.2.sroa_idx, align 8, !tbaa !5
  %.sroa.80.0.copyload115 = load i64, ptr %.sroa.80.0.scevgep.2.sroa_idx, align 8, !tbaa !5
  %.sroa.93.0.copyload130 = load i64, ptr %.sroa.93.0.scevgep.2.sroa_idx, align 8, !tbaa !5
  %.sroa.106.0.copyload145 = load i64, ptr %.sroa.106.0.scevgep.2.sroa_idx, align 8, !tbaa !5
  %405 = xor i64 %.sroa.67.0.copyload100, -1
  %406 = and i64 %.sroa.80.0.copyload115, %405
  %407 = xor i64 %.sroa.0.0.copyload96, %406
  store i64 %407, ptr %.phi.trans.insert190, align 8, !tbaa !5
  %408 = xor i64 %.sroa.80.0.copyload115, -1
  %409 = and i64 %.sroa.93.0.copyload130, %408
  %410 = xor i64 %.sroa.67.0.copyload100, %409
  store i64 %410, ptr %11, align 8, !tbaa !5
  %411 = xor i64 %.sroa.93.0.copyload130, -1
  %412 = and i64 %.sroa.106.0.copyload145, %411
  %413 = xor i64 %.sroa.80.0.copyload115, %412
  store i64 %413, ptr %15, align 8, !tbaa !5
  %414 = xor i64 %.sroa.106.0.copyload145, -1
  %415 = and i64 %.sroa.0.0.copyload96, %414
  %416 = xor i64 %.sroa.93.0.copyload130, %415
  store i64 %416, ptr %19, align 8, !tbaa !5
  %417 = xor i64 %.sroa.0.0.copyload96, -1
  %418 = and i64 %.sroa.67.0.copyload100, %417
  %419 = xor i64 %.sroa.106.0.copyload145, %418
  store i64 %419, ptr %23, align 8, !tbaa !5
  %.sroa.0.0.copyload97 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !5
  %.sroa.67.0.copyload101 = load i64, ptr %.sroa.67.0.scevgep.3.sroa_idx, align 8, !tbaa !5
  %.sroa.80.0.copyload116 = load i64, ptr %.sroa.80.0.scevgep.3.sroa_idx, align 8, !tbaa !5
  %.sroa.93.0.copyload131 = load i64, ptr %.sroa.93.0.scevgep.3.sroa_idx, align 8, !tbaa !5
  %.sroa.106.0.copyload146 = load i64, ptr %.sroa.106.0.scevgep.3.sroa_idx, align 8, !tbaa !5
  %420 = xor i64 %.sroa.67.0.copyload101, -1
  %421 = and i64 %.sroa.80.0.copyload116, %420
  %422 = xor i64 %.sroa.0.0.copyload97, %421
  store i64 %422, ptr %.phi.trans.insert, align 8, !tbaa !5
  %423 = xor i64 %.sroa.80.0.copyload116, -1
  %424 = and i64 %.sroa.93.0.copyload131, %423
  %425 = xor i64 %.sroa.67.0.copyload101, %424
  store i64 %425, ptr %12, align 8, !tbaa !5
  %426 = xor i64 %.sroa.93.0.copyload131, -1
  %427 = and i64 %.sroa.106.0.copyload146, %426
  %428 = xor i64 %.sroa.80.0.copyload116, %427
  store i64 %428, ptr %16, align 8, !tbaa !5
  %429 = xor i64 %.sroa.106.0.copyload146, -1
  %430 = and i64 %.sroa.0.0.copyload97, %429
  %431 = xor i64 %.sroa.93.0.copyload131, %430
  store i64 %431, ptr %20, align 8, !tbaa !5
  %432 = xor i64 %.sroa.0.0.copyload97, -1
  %433 = and i64 %.sroa.67.0.copyload101, %432
  %434 = xor i64 %.sroa.106.0.copyload146, %433
  store i64 %434, ptr %24, align 8, !tbaa !5
  %.sroa.0.0.copyload98 = load i64, ptr %.phi.trans.insert160, align 8, !tbaa !5
  %.sroa.67.0.copyload102 = load i64, ptr %.sroa.67.0.scevgep.4.sroa_idx, align 8, !tbaa !5
  %.sroa.80.0.copyload117 = load i64, ptr %.sroa.80.0.scevgep.4.sroa_idx, align 8, !tbaa !5
  %.sroa.93.0.copyload132 = load i64, ptr %.sroa.93.0.scevgep.4.sroa_idx, align 8, !tbaa !5
  %.sroa.106.0.copyload147 = load i64, ptr %.sroa.106.0.scevgep.4.sroa_idx, align 8, !tbaa !5
  %435 = xor i64 %.sroa.67.0.copyload102, -1
  %436 = and i64 %.sroa.80.0.copyload117, %435
  %437 = xor i64 %.sroa.0.0.copyload98, %436
  store i64 %437, ptr %.phi.trans.insert160, align 8, !tbaa !5
  %438 = xor i64 %.sroa.80.0.copyload117, -1
  %439 = and i64 %.sroa.93.0.copyload132, %438
  %440 = xor i64 %.sroa.67.0.copyload102, %439
  store i64 %440, ptr %13, align 8, !tbaa !5
  %441 = xor i64 %.sroa.93.0.copyload132, -1
  %442 = and i64 %.sroa.106.0.copyload147, %441
  %443 = xor i64 %.sroa.80.0.copyload117, %442
  store i64 %443, ptr %17, align 8, !tbaa !5
  %444 = xor i64 %.sroa.106.0.copyload147, -1
  %445 = and i64 %.sroa.0.0.copyload98, %444
  %446 = xor i64 %.sroa.93.0.copyload132, %445
  store i64 %446, ptr %21, align 8, !tbaa !5
  %447 = xor i64 %.sroa.0.0.copyload98, -1
  %448 = and i64 %.sroa.67.0.copyload102, %447
  %449 = xor i64 %.sroa.106.0.copyload147, %448
  store i64 %449, ptr %25, align 8, !tbaa !5
  %450 = getelementptr inbounds [24 x i64], ptr @__const.sha3_keccakf.keccakf_rndc, i64 0, i64 %indvars.iv
  %451 = load i64, ptr %450, align 8, !tbaa !5
  %452 = load i64, ptr %0, align 8, !tbaa !5
  %453 = xor i64 %452, %451
  store i64 %453, ptr %0, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 24
  br i1 %exitcond.not, label %454, label %.preheader64, !llvm.loop !11

454:                                              ; preds = %.preheader64
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.fshl.i64(i64, i64, i64) #1

attributes #0 = { nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass