Skip to content

Instantly share code, notes, and snippets.

@jedisct1
Created November 27, 2016 20:31
Show Gist options
  • Save jedisct1/ba5880c9e4fd395d4e1a7f85e6b6bed7 to your computer and use it in GitHub Desktop.
Save jedisct1/ba5880c9e4fd395d4e1a7f85e6b6bed7 to your computer and use it in GitHub Desktop.
; ModuleID = 'b2b.cgu-0.rs'
source_filename = "b2b.cgu-0.rs"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-darwin"
%str_slice = type { i8*, i64 }
%"unwind::libunwind::_Unwind_Exception" = type { i64, void (i32, %"unwind::libunwind::_Unwind_Exception"*)*, [6 x i64] }
%"unwind::libunwind::_Unwind_Context" = type {}
@str.0 = internal constant [20 x i8] c"src/libcore/slice.rs"
@panic_bounds_check_loc.1 = internal unnamed_addr constant { %str_slice, i32 } { %str_slice { i8* getelementptr inbounds ([20 x i8], [20 x i8]* @str.0, i32 0, i32 0), i64 20 }, i32 640 }, align 8
@str.2 = internal constant [6 x i8] c"b2b.rs"
@const.4 = internal unnamed_addr constant [12 x [16 x i64]] [[16 x i64] [i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15], [16 x i64] [i64 14, i64 10, i64 4, i64 8, i64 9, i64 15, i64 13, i64 6, i64 1, i64 12, i64 0, i64 2, i64 11, i64 7, i64 5, i64 3], [16 x i64] [i64 11, i64 8, i64 12, i64 0, i64 5, i64 2, i64 15, i64 13, i64 10, i64 14, i64 3, i64 6, i64 7, i64 1, i64 9, i64 4], [16 x i64] [i64 7, i64 9, i64 3, i64 1, i64 13, i64 12, i64 11, i64 14, i64 2, i64 6, i64 5, i64 10, i64 4, i64 0, i64 15, i64 8], [16 x i64] [i64 9, i64 0, i64 5, i64 7, i64 2, i64 4, i64 10, i64 15, i64 14, i64 1, i64 11, i64 12, i64 6, i64 8, i64 3, i64 13], [16 x i64] [i64 2, i64 12, i64 6, i64 10, i64 0, i64 11, i64 8, i64 3, i64 4, i64 13, i64 7, i64 5, i64 15, i64 14, i64 1, i64 9], [16 x i64] [i64 12, i64 5, i64 1, i64 15, i64 14, i64 13, i64 4, i64 10, i64 0, i64 7, i64 6, i64 3, i64 9, i64 2, i64 8, i64 11], [16 x i64] [i64 13, i64 11, i64 7, i64 14, i64 12, i64 1, i64 3, i64 9, i64 5, i64 0, i64 15, i64 4, i64 8, i64 6, i64 2, i64 10], [16 x i64] [i64 6, i64 15, i64 14, i64 9, i64 11, i64 3, i64 0, i64 8, i64 12, i64 2, i64 13, i64 7, i64 1, i64 4, i64 10, i64 5], [16 x i64] [i64 10, i64 2, i64 8, i64 4, i64 7, i64 6, i64 1, i64 5, i64 15, i64 11, i64 9, i64 14, i64 3, i64 12, i64 13, i64 0], [16 x i64] [i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15], [16 x i64] [i64 14, i64 10, i64 4, i64 8, i64 9, i64 15, i64 13, i64 6, i64 1, i64 12, i64 0, i64 2, i64 11, i64 7, i64 5, i64 3]], align 8
@panic_bounds_check_loc.e = internal unnamed_addr constant { %str_slice, i32 } { %str_slice { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @str.2, i32 0, i32 0), i64 6 }, i32 77 }, align 8
define internal fastcc void @_ZN3b2b12b2b_compress17h36d71a90a69834d4E([8 x i64]* nocapture dereferenceable(64), i64, i64, i8* noalias nocapture nonnull readonly, i64) unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
entry-block:
%m = alloca [16 x i64], align 8
%5 = bitcast [16 x i64]* %m to i8*
%6 = getelementptr inbounds [8 x i64], [8 x i64]* %0, i64 0, i64 0
%7 = load i64, i64* %6, align 8
%8 = getelementptr inbounds [8 x i64], [8 x i64]* %0, i64 0, i64 1
%9 = load i64, i64* %8, align 8
%10 = getelementptr inbounds [8 x i64], [8 x i64]* %0, i64 0, i64 2
%11 = load i64, i64* %10, align 8
%12 = getelementptr inbounds [8 x i64], [8 x i64]* %0, i64 0, i64 3
%13 = load i64, i64* %12, align 8
%14 = getelementptr inbounds [8 x i64], [8 x i64]* %0, i64 0, i64 4
%15 = load i64, i64* %14, align 8
%16 = getelementptr inbounds [8 x i64], [8 x i64]* %0, i64 0, i64 5
%17 = load i64, i64* %16, align 8
%18 = getelementptr inbounds [8 x i64], [8 x i64]* %0, i64 0, i64 6
%19 = load i64, i64* %18, align 8
%20 = getelementptr inbounds [8 x i64], [8 x i64]* %0, i64 0, i64 7
%21 = load i64, i64* %20, align 8
%22 = xor i64 %1, 5840696475078001361
%23 = xor i64 %2, 2270897969802886507
call void @llvm.lifetime.start(i64 128, i8* %5)
call void @llvm.memset.p0i8.i64(i8* %5, i8 0, i64 128, i32 8, i1 false)
br label %bb13
bb13: ; preds = %entry-block, %bb20.7
%iter.sroa.0.0149 = phi i64 [ %24, %bb20.7 ], [ 0, %entry-block ]
%24 = add nuw nsw i64 %iter.sroa.0.0149, 1
%25 = shl i64 %iter.sroa.0.0149, 3
%26 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %iter.sroa.0.0149
%27 = icmp ult i64 %25, %4
br i1 %27, label %bb20, label %panic.i.i72, !prof !0
panic.i.i72: ; preds = %bb20.6, %bb20.5, %bb20.4, %bb20.3, %bb20.2, %bb20.1, %bb20, %bb13
%.lcssa167 = phi i64 [ %25, %bb13 ], [ %33, %bb20 ], [ %286, %bb20.1 ], [ %293, %bb20.2 ], [ %300, %bb20.3 ], [ %307, %bb20.4 ], [ %314, %bb20.5 ], [ %321, %bb20.6 ]
call void @_ZN4core9panicking18panic_bounds_check17h061ee2397a78277dE({ %str_slice, i32 }* nonnull @panic_bounds_check_loc.1, i64 %.lcssa167, i64 %4), !noalias !1
unreachable
bb20: ; preds = %bb13
%28 = getelementptr inbounds i8, i8* %3, i64 %25
%29 = load i8, i8* %28, align 1
%30 = zext i8 %29 to i64
%31 = load i64, i64* %26, align 8
%32 = or i64 %30, %31
store i64 %32, i64* %26, align 8
%33 = or i64 %25, 1
%34 = icmp ult i64 %33, %4
br i1 %34, label %bb20.1, label %panic.i.i72, !prof !0
bb31: ; preds = %bb31.preheader, %bb31
%35 = phi i64 [ %249, %bb31 ], [ -6534734903238641935, %bb31.preheader ]
%36 = phi i64 [ %258, %bb31 ], [ 6620516959819538809, %bb31.preheader ]
%37 = phi i64 [ %267, %bb31 ], [ %21, %bb31.preheader ]
%38 = phi i64 [ %261, %bb31 ], [ %13, %bb31.preheader ]
%39 = phi i64 [ %248, %bb31 ], [ 4354685564936845355, %bb31.preheader ]
%40 = phi i64 [ %257, %bb31 ], [ %23, %bb31.preheader ]
%41 = phi i64 [ %266, %bb31 ], [ %19, %bb31.preheader ]
%42 = phi i64 [ %260, %bb31 ], [ %11, %bb31.preheader ]
%43 = phi i64 [ %251, %bb31 ], [ -4942790177534073029, %bb31.preheader ]
%44 = phi i64 [ %256, %bb31 ], [ -7276294671716946913, %bb31.preheader ]
%45 = phi i64 [ %265, %bb31 ], [ %17, %bb31.preheader ]
%46 = phi i64 [ %263, %bb31 ], [ %9, %bb31.preheader ]
%47 = phi i64 [ %250, %bb31 ], [ 7640891576956012808, %bb31.preheader ]
%48 = phi i64 [ %259, %bb31 ], [ %22, %bb31.preheader ]
%49 = phi i64 [ %264, %bb31 ], [ %15, %bb31.preheader ]
%50 = phi i64 [ %262, %bb31 ], [ %7, %bb31.preheader ]
%iter4.sroa.0.0116 = phi i64 [ %51, %bb31 ], [ 0, %bb31.preheader ]
%51 = add nuw nsw i64 %iter4.sroa.0.0116, 1
%52 = add i64 %49, %50
%53 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 0
%54 = load i64, i64* %53, align 8
%55 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %54
%56 = load i64, i64* %55, align 8
%57 = add i64 %52, %56
%58 = xor i64 %48, %57
%59 = lshr i64 %58, 32
%60 = shl i64 %58, 32
%61 = or i64 %59, %60
%62 = add i64 %61, %47
%63 = xor i64 %49, %62
%64 = lshr i64 %63, 24
%65 = shl i64 %63, 40
%66 = or i64 %64, %65
%67 = add i64 %66, %57
%68 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 1
%69 = load i64, i64* %68, align 8
%70 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %69
%71 = load i64, i64* %70, align 8
%72 = add i64 %67, %71
%73 = xor i64 %61, %72
%74 = add i64 %45, %46
%75 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 2
%76 = load i64, i64* %75, align 8
%77 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %76
%78 = load i64, i64* %77, align 8
%79 = add i64 %74, %78
%80 = xor i64 %44, %79
%81 = lshr i64 %80, 32
%82 = shl i64 %80, 32
%83 = or i64 %81, %82
%84 = add i64 %83, %43
%85 = xor i64 %45, %84
%86 = lshr i64 %85, 24
%87 = shl i64 %85, 40
%88 = or i64 %86, %87
%89 = add i64 %88, %79
%90 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 3
%91 = load i64, i64* %90, align 8
%92 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %91
%93 = load i64, i64* %92, align 8
%94 = add i64 %89, %93
%95 = xor i64 %83, %94
%96 = add i64 %41, %42
%97 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 4
%98 = load i64, i64* %97, align 8
%99 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %98
%100 = load i64, i64* %99, align 8
%101 = add i64 %96, %100
%102 = xor i64 %40, %101
%103 = lshr i64 %102, 32
%104 = shl i64 %102, 32
%105 = or i64 %103, %104
%106 = add i64 %105, %39
%107 = xor i64 %41, %106
%108 = lshr i64 %107, 24
%109 = shl i64 %107, 40
%110 = or i64 %108, %109
%111 = add i64 %110, %101
%112 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 5
%113 = load i64, i64* %112, align 8
%114 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %113
%115 = load i64, i64* %114, align 8
%116 = add i64 %111, %115
%117 = xor i64 %105, %116
%118 = add i64 %37, %38
%119 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 6
%120 = load i64, i64* %119, align 8
%121 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %120
%122 = load i64, i64* %121, align 8
%123 = add i64 %118, %122
%124 = xor i64 %36, %123
%125 = lshr i64 %124, 32
%126 = shl i64 %124, 32
%127 = or i64 %125, %126
%128 = add i64 %127, %35
%129 = xor i64 %37, %128
%130 = lshr i64 %129, 24
%131 = shl i64 %129, 40
%132 = or i64 %130, %131
%133 = add i64 %132, %123
%134 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 7
%135 = load i64, i64* %134, align 8
%136 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %135
%137 = load i64, i64* %136, align 8
%138 = add i64 %133, %137
%139 = xor i64 %127, %138
%140 = insertelement <4 x i64> undef, i64 %95, i32 0
%141 = insertelement <4 x i64> %140, i64 %117, i32 1
%142 = insertelement <4 x i64> %141, i64 %139, i32 2
%143 = insertelement <4 x i64> %142, i64 %73, i32 3
%144 = lshr <4 x i64> %143, <i64 16, i64 16, i64 16, i64 16>
%145 = shl <4 x i64> %143, <i64 48, i64 48, i64 48, i64 48>
%146 = or <4 x i64> %144, %145
%147 = extractelement <4 x i64> %146, i32 3
%148 = add i64 %147, %62
%149 = xor i64 %66, %148
%150 = lshr i64 %149, 63
%151 = shl i64 %149, 1
%152 = or i64 %150, %151
%153 = extractelement <4 x i64> %146, i32 0
%154 = add i64 %153, %84
%155 = xor i64 %88, %154
%156 = lshr i64 %155, 63
%157 = shl i64 %155, 1
%158 = or i64 %156, %157
%159 = extractelement <4 x i64> %146, i32 1
%160 = add i64 %159, %106
%161 = xor i64 %110, %160
%162 = lshr i64 %161, 63
%163 = shl i64 %161, 1
%164 = or i64 %162, %163
%165 = extractelement <4 x i64> %146, i32 2
%166 = add i64 %165, %128
%167 = xor i64 %132, %166
%168 = lshr i64 %167, 63
%169 = shl i64 %167, 1
%170 = or i64 %168, %169
%171 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 8
%172 = load i64, i64* %171, align 8
%173 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %172
%174 = load i64, i64* %173, align 8
%175 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 10
%176 = load i64, i64* %175, align 8
%177 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %176
%178 = load i64, i64* %177, align 8
%179 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 12
%180 = load i64, i64* %179, align 8
%181 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %180
%182 = load i64, i64* %181, align 8
%183 = insertelement <4 x i64> undef, i64 %170, i32 0
%184 = insertelement <4 x i64> %183, i64 %152, i32 1
%185 = insertelement <4 x i64> %184, i64 %158, i32 2
%186 = insertelement <4 x i64> %185, i64 %164, i32 3
%187 = insertelement <4 x i64> undef, i64 %116, i32 0
%188 = insertelement <4 x i64> %187, i64 %138, i32 1
%189 = insertelement <4 x i64> %188, i64 %72, i32 2
%190 = insertelement <4 x i64> %189, i64 %94, i32 3
%191 = add <4 x i64> %186, %190
%192 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 14
%193 = load i64, i64* %192, align 8
%194 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %193
%195 = load i64, i64* %194, align 8
%196 = insertelement <4 x i64> undef, i64 %182, i32 0
%197 = insertelement <4 x i64> %196, i64 %195, i32 1
%198 = insertelement <4 x i64> %197, i64 %174, i32 2
%199 = insertelement <4 x i64> %198, i64 %178, i32 3
%200 = add <4 x i64> %191, %199
%201 = xor <4 x i64> %146, %200
%202 = lshr <4 x i64> %201, <i64 32, i64 32, i64 32, i64 32>
%203 = shl <4 x i64> %201, <i64 32, i64 32, i64 32, i64 32>
%204 = or <4 x i64> %202, %203
%205 = extractelement <4 x i64> %204, i32 2
%206 = add i64 %205, %160
%207 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 9
%208 = load i64, i64* %207, align 8
%209 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %208
%210 = load i64, i64* %209, align 8
%211 = extractelement <4 x i64> %204, i32 3
%212 = add i64 %211, %166
%213 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 11
%214 = load i64, i64* %213, align 8
%215 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %214
%216 = load i64, i64* %215, align 8
%217 = extractelement <4 x i64> %204, i32 0
%218 = add i64 %217, %148
%219 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 13
%220 = load i64, i64* %219, align 8
%221 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %220
%222 = load i64, i64* %221, align 8
%223 = extractelement <4 x i64> %204, i32 1
%224 = add i64 %223, %154
%225 = insertelement <4 x i64> undef, i64 %218, i32 0
%226 = insertelement <4 x i64> %225, i64 %224, i32 1
%227 = insertelement <4 x i64> %226, i64 %206, i32 2
%228 = insertelement <4 x i64> %227, i64 %212, i32 3
%229 = xor <4 x i64> %186, %228
%230 = lshr <4 x i64> %229, <i64 24, i64 24, i64 24, i64 24>
%231 = shl <4 x i64> %229, <i64 40, i64 40, i64 40, i64 40>
%232 = or <4 x i64> %230, %231
%233 = add <4 x i64> %232, %200
%234 = getelementptr inbounds [12 x [16 x i64]], [12 x [16 x i64]]* @const.4, i64 0, i64 %iter4.sroa.0.0116, i64 15
%235 = load i64, i64* %234, align 8
%236 = getelementptr inbounds [16 x i64], [16 x i64]* %m, i64 0, i64 %235
%237 = load i64, i64* %236, align 8
%238 = insertelement <4 x i64> undef, i64 %222, i32 0
%239 = insertelement <4 x i64> %238, i64 %237, i32 1
%240 = insertelement <4 x i64> %239, i64 %210, i32 2
%241 = insertelement <4 x i64> %240, i64 %216, i32 3
%242 = add <4 x i64> %233, %241
%243 = xor <4 x i64> %204, %242
%244 = lshr <4 x i64> %243, <i64 16, i64 16, i64 16, i64 16>
%245 = shl <4 x i64> %243, <i64 48, i64 48, i64 48, i64 48>
%246 = or <4 x i64> %244, %245
%247 = add <4 x i64> %246, %228
%248 = extractelement <4 x i64> %247, i32 2
%249 = extractelement <4 x i64> %247, i32 3
%250 = extractelement <4 x i64> %247, i32 0
%251 = extractelement <4 x i64> %247, i32 1
%252 = xor <4 x i64> %232, %247
%253 = lshr <4 x i64> %252, <i64 63, i64 63, i64 63, i64 63>
%254 = shl <4 x i64> %252, <i64 1, i64 1, i64 1, i64 1>
%255 = or <4 x i64> %253, %254
%exitcond = icmp eq i64 %51, 12
%256 = extractelement <4 x i64> %246, i32 0
%257 = extractelement <4 x i64> %246, i32 1
%258 = extractelement <4 x i64> %246, i32 2
%259 = extractelement <4 x i64> %246, i32 3
%260 = extractelement <4 x i64> %242, i32 0
%261 = extractelement <4 x i64> %242, i32 1
%262 = extractelement <4 x i64> %242, i32 2
%263 = extractelement <4 x i64> %242, i32 3
%264 = extractelement <4 x i64> %255, i32 1
%265 = extractelement <4 x i64> %255, i32 2
%266 = extractelement <4 x i64> %255, i32 3
%267 = extractelement <4 x i64> %255, i32 0
br i1 %exitcond, label %bb353.7, label %bb31
bb353.7: ; preds = %bb31
%268 = shufflevector <4 x i64> %255, <4 x i64> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0>
%269 = shufflevector <4 x i64> %242, <4 x i64> undef, <4 x i32> <i32 2, i32 3, i32 0, i32 1>
%270 = xor <4 x i64> %247, %269
%271 = bitcast [8 x i64]* %0 to <4 x i64>*
%272 = load <4 x i64>, <4 x i64>* %271, align 8
%273 = xor <4 x i64> %270, %272
%274 = bitcast [8 x i64]* %0 to <4 x i64>*
store <4 x i64> %273, <4 x i64>* %274, align 8
%275 = shufflevector <4 x i64> %246, <4 x i64> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
%276 = xor <4 x i64> %275, %268
%277 = bitcast i64* %14 to <4 x i64>*
%278 = load <4 x i64>, <4 x i64>* %277, align 8
%279 = xor <4 x i64> %276, %278
%280 = bitcast i64* %14 to <4 x i64>*
store <4 x i64> %279, <4 x i64>* %280, align 8
call void @llvm.lifetime.end(i64 128, i8* nonnull %5)
ret void
bb20.1: ; preds = %bb20
%281 = getelementptr inbounds i8, i8* %3, i64 %33
%282 = load i8, i8* %281, align 1
%283 = zext i8 %282 to i64
%284 = shl nuw nsw i64 %283, 8
%285 = or i64 %284, %32
store i64 %285, i64* %26, align 8
%286 = or i64 %25, 2
%287 = icmp ult i64 %286, %4
br i1 %287, label %bb20.2, label %panic.i.i72, !prof !0
bb20.2: ; preds = %bb20.1
%288 = getelementptr inbounds i8, i8* %3, i64 %286
%289 = load i8, i8* %288, align 1
%290 = zext i8 %289 to i64
%291 = shl nuw nsw i64 %290, 16
%292 = or i64 %291, %285
store i64 %292, i64* %26, align 8
%293 = or i64 %25, 3
%294 = icmp ult i64 %293, %4
br i1 %294, label %bb20.3, label %panic.i.i72, !prof !0
bb20.3: ; preds = %bb20.2
%295 = getelementptr inbounds i8, i8* %3, i64 %293
%296 = load i8, i8* %295, align 1
%297 = zext i8 %296 to i64
%298 = shl nuw nsw i64 %297, 24
%299 = or i64 %298, %292
store i64 %299, i64* %26, align 8
%300 = or i64 %25, 4
%301 = icmp ult i64 %300, %4
br i1 %301, label %bb20.4, label %panic.i.i72, !prof !0
bb20.4: ; preds = %bb20.3
%302 = getelementptr inbounds i8, i8* %3, i64 %300
%303 = load i8, i8* %302, align 1
%304 = zext i8 %303 to i64
%305 = shl nuw nsw i64 %304, 32
%306 = or i64 %305, %299
store i64 %306, i64* %26, align 8
%307 = or i64 %25, 5
%308 = icmp ult i64 %307, %4
br i1 %308, label %bb20.5, label %panic.i.i72, !prof !0
bb20.5: ; preds = %bb20.4
%309 = getelementptr inbounds i8, i8* %3, i64 %307
%310 = load i8, i8* %309, align 1
%311 = zext i8 %310 to i64
%312 = shl nuw nsw i64 %311, 40
%313 = or i64 %312, %306
store i64 %313, i64* %26, align 8
%314 = or i64 %25, 6
%315 = icmp ult i64 %314, %4
br i1 %315, label %bb20.6, label %panic.i.i72, !prof !0
bb20.6: ; preds = %bb20.5
%316 = getelementptr inbounds i8, i8* %3, i64 %314
%317 = load i8, i8* %316, align 1
%318 = zext i8 %317 to i64
%319 = shl nuw nsw i64 %318, 48
%320 = or i64 %319, %313
store i64 %320, i64* %26, align 8
%321 = or i64 %25, 7
%322 = icmp ult i64 %321, %4
br i1 %322, label %bb20.7, label %panic.i.i72, !prof !0
bb20.7: ; preds = %bb20.6
%323 = getelementptr inbounds i8, i8* %3, i64 %321
%324 = load i8, i8* %323, align 1
%325 = zext i8 %324 to i64
%326 = shl nuw i64 %325, 56
%327 = or i64 %326, %320
store i64 %327, i64* %26, align 8
%328 = icmp ult i64 %24, 16
br i1 %328, label %bb13, label %bb31.preheader
bb31.preheader: ; preds = %bb20.7
br label %bb31
}
define void @_ZN3b2b3b2b17h0476c9cb319543d4E([64 x i8]* noalias nocapture sret dereferenceable(64), i8* noalias nonnull readonly, i64) unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
entry-block:
%hash = alloca [8 x i64], align 8
%block = alloca [128 x i8], align 1
%block73 = getelementptr inbounds [128 x i8], [128 x i8]* %block, i64 0, i64 0
%digest = alloca [64 x i8], align 1
%digest72 = getelementptr inbounds [64 x i8], [64 x i8]* %digest, i64 0, i64 0
%3 = bitcast [8 x i64]* %hash to i8*
call void @llvm.lifetime.start(i64 64, i8* %3)
%4 = bitcast [8 x i64]* %hash to <4 x i64>*
store <4 x i64> <i64 7640891576939301192, i64 -4942790177534073029, i64 4354685564936845355, i64 -6534734903238641935>, <4 x i64>* %4, align 8
%5 = getelementptr inbounds [8 x i64], [8 x i64]* %hash, i64 0, i64 4
%6 = bitcast i64* %5 to <4 x i64>*
store <4 x i64> <i64 5840696475078001361, i64 -7276294671716946913, i64 2270897969802886507, i64 6620516959819538809>, <4 x i64>* %6, align 8
%7 = icmp ugt i64 %2, 128
br i1 %7, label %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit.preheader", label %bb2
"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit.preheader": ; preds = %entry-block
%8 = add i64 %2, -129
%9 = and i64 %8, -128
%10 = add i64 %9, 128
%11 = add i64 %2, -128
br label %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit"
bb2.loopexit: ; preds = %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit"
%scevgep = getelementptr i8, i8* %1, i64 %10
%12 = sub i64 %11, %9
br label %bb2
bb2: ; preds = %bb2.loopexit, %entry-block
%data.sroa.0.0.lcssa = phi i8* [ %1, %entry-block ], [ %scevgep, %bb2.loopexit ]
%data.sroa.10.0.lcssa = phi i64 [ %2, %entry-block ], [ %12, %bb2.loopexit ]
call void @llvm.lifetime.start(i64 128, i8* %block73)
call void @llvm.memset.p0i8.i64(i8* %block73, i8 0, i64 128, i32 1, i1 false)
%13 = icmp eq i64 %data.sroa.10.0.lcssa, 0
br i1 %13, label %bb12, label %bb14.preheader
bb14.preheader: ; preds = %bb2
br label %bb14
"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit": ; preds = %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit.preheader", %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit"
%t.068 = phi i64 [ %14, %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit" ], [ 0, %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit.preheader" ]
%data.sroa.10.067 = phi i64 [ %16, %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit" ], [ %2, %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit.preheader" ]
%data.sroa.0.066 = phi i8* [ %15, %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit" ], [ %1, %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit.preheader" ]
%14 = add i64 %t.068, 128
%15 = getelementptr inbounds i8, i8* %data.sroa.0.066, i64 128
%16 = add i64 %data.sroa.10.067, -128
call fastcc void @_ZN3b2b12b2b_compress17h36d71a90a69834d4E([8 x i64]* nonnull dereferenceable(64) %hash, i64 %14, i64 0, i8* noalias nonnull readonly %data.sroa.0.066, i64 128)
%17 = icmp ugt i64 %16, 128
br i1 %17, label %"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h7a17581679ba6f6dE.exit", label %bb2.loopexit
bb12.loopexit: ; preds = %bb15
br label %bb12
bb12: ; preds = %bb12.loopexit, %bb2
call fastcc void @_ZN3b2b12b2b_compress17h36d71a90a69834d4E([8 x i64]* nonnull dereferenceable(64) %hash, i64 %2, i64 -1, i8* noalias nonnull readonly %block73, i64 128)
call void @llvm.lifetime.start(i64 64, i8* %digest72)
call void @llvm.memset.p0i8.i64(i8* %digest72, i8 0, i64 64, i32 1, i1 false)
br label %bb26
bb14: ; preds = %bb14.preheader, %bb15
%iter.sroa.0.065 = phi i64 [ %19, %bb15 ], [ 0, %bb14.preheader ]
%18 = icmp ult i64 %iter.sroa.0.065, 128
br i1 %18, label %bb15, label %panic3, !prof !0
bb15: ; preds = %bb14
%19 = add nuw nsw i64 %iter.sroa.0.065, 1
%20 = getelementptr inbounds i8, i8* %data.sroa.0.0.lcssa, i64 %iter.sroa.0.065
%21 = load i8, i8* %20, align 1
%22 = getelementptr inbounds [128 x i8], [128 x i8]* %block, i64 0, i64 %iter.sroa.0.065
store i8 %21, i8* %22, align 1
%23 = icmp ult i64 %19, %data.sroa.10.0.lcssa
br i1 %23, label %bb14, label %bb12.loopexit
bb21: ; preds = %bb26
%24 = getelementptr inbounds [64 x i8], [64 x i8]* %0, i64 0, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* nonnull %digest72, i64 64, i32 1, i1 false)
call void @llvm.lifetime.end(i64 64, i8* nonnull %digest72)
call void @llvm.lifetime.end(i64 128, i8* %block73)
call void @llvm.lifetime.end(i64 64, i8* nonnull %3)
ret void
bb26: ; preds = %bb26, %bb12
%iter2.sroa.0.064 = phi i64 [ 0, %bb12 ], [ %53, %bb26 ]
%25 = lshr i64 %iter2.sroa.0.064, 3
%26 = or i64 %iter2.sroa.0.064, 1
%27 = getelementptr inbounds [8 x i64], [8 x i64]* %hash, i64 0, i64 %25
%28 = shl i64 %iter2.sroa.0.064, 3
%29 = load i64, i64* %27, align 8
%30 = and i64 %28, 32
%31 = lshr i64 %29, %30
%32 = getelementptr inbounds [64 x i8], [64 x i8]* %digest, i64 0, i64 %iter2.sroa.0.064
%33 = trunc i64 %31 to i8
store i8 %33, i8* %32, align 1
%34 = lshr i64 %iter2.sroa.0.064, 3
%35 = or i64 %iter2.sroa.0.064, 2
%36 = getelementptr inbounds [8 x i64], [8 x i64]* %hash, i64 0, i64 %34
%37 = shl i64 %26, 3
%38 = load i64, i64* %36, align 8
%39 = and i64 %37, 40
%40 = lshr i64 %38, %39
%41 = getelementptr inbounds [64 x i8], [64 x i8]* %digest, i64 0, i64 %26
%42 = trunc i64 %40 to i8
store i8 %42, i8* %41, align 1
%43 = lshr i64 %iter2.sroa.0.064, 3
%44 = or i64 %iter2.sroa.0.064, 3
%45 = getelementptr inbounds [8 x i64], [8 x i64]* %hash, i64 0, i64 %43
%46 = shl i64 %35, 3
%47 = load i64, i64* %45, align 8
%48 = and i64 %46, 48
%49 = lshr i64 %47, %48
%50 = getelementptr inbounds [64 x i8], [64 x i8]* %digest, i64 0, i64 %35
%51 = trunc i64 %49 to i8
store i8 %51, i8* %50, align 1
%52 = lshr i64 %iter2.sroa.0.064, 3
%53 = add nsw i64 %iter2.sroa.0.064, 4
%54 = getelementptr inbounds [8 x i64], [8 x i64]* %hash, i64 0, i64 %52
%55 = shl i64 %44, 3
%56 = load i64, i64* %54, align 8
%57 = and i64 %55, 56
%58 = lshr i64 %56, %57
%59 = getelementptr inbounds [64 x i8], [64 x i8]* %digest, i64 0, i64 %44
%60 = trunc i64 %58 to i8
store i8 %60, i8* %59, align 1
%exitcond.3 = icmp eq i64 %53, 64
br i1 %exitcond.3, label %bb21, label %bb26
panic3: ; preds = %bb14
call void @_ZN4core9panicking18panic_bounds_check17h061ee2397a78277dE({ %str_slice, i32 }* nonnull @panic_bounds_check_loc.e, i64 %iter.sroa.0.065, i64 128)
unreachable
}
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start(i64, i8* nocapture) #1
; Function Attrs: nounwind
declare i32 @rust_eh_personality(i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*) unnamed_addr #2
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end(i64, i8* nocapture) #1
; Function Attrs: cold noinline noreturn
declare void @_ZN4core9panicking18panic_bounds_check17h061ee2397a78277dE({ %str_slice, i32 }* noalias readonly dereferenceable(24), i64, i64) unnamed_addr #3
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i32, i1) #1
attributes #0 = { "no-frame-pointer-elim"="true" }
attributes #1 = { argmemonly nounwind }
attributes #2 = { nounwind "no-frame-pointer-elim"="true" }
attributes #3 = { cold noinline noreturn "no-frame-pointer-elim"="true" }
!0 = !{!"branch_weights", i32 2000, i32 1}
!1 = !{!2, !4}
!2 = distinct !{!2, !3, !"_ZN58_$LT$usize$u20$as$u20$core..slice..SliceIndex$LT$T$GT$$GT$5index17hda9059df340cd7beE: argument 0"}
!3 = distinct !{!3, !"_ZN58_$LT$usize$u20$as$u20$core..slice..SliceIndex$LT$T$GT$$GT$5index17hda9059df340cd7beE"}
!4 = distinct !{!4, !5, !"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h8f3a5418fb19e67dE: argument 0"}
!5 = distinct !{!5, !"_ZN4core5slice67_$LT$impl$u20$core..ops..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h8f3a5418fb19e67dE"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment