[llvm] r235837 - [X86][SSE] Add v16i8/v32i8 multiplication support

Tobias Grosser tobias at grosser.es
Wed Apr 29 08:03:57 PDT 2015


On 04/29/2015 02:14 AM, Richard Smith wrote:
> In case you've not seen, this caused PR23369.

This also broke the attached test case if compiled with:

llc out.ll -O3 -o out.s && gcc out.s -lm

This was extracted from an LLVM LNT test-suite test case.
I see three such failures when running LNT in combination with Polly 
(which seems to expose these vectorization opportunities).

Best,
Tobias
-------------- next part --------------
; ModuleID = '/home/grosser/Projects/polly/test-suite/SingleSource/Benchmarks/Adobe-C++/simple_types_loop_invariant.cpp'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.one_result = type { double, i8* }
%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }

$_Z14test_variable1Ia19custom_add_variableIaEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1Ia19custom_add_variableIaEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ia28custom_add_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ia19custom_sub_variableIaEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ia28custom_sub_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ia24custom_multiply_variableIaEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ia33custom_multiply_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ia34custom_multiply_multiple_variable2IaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ia22custom_divide_variableIaEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ia31custom_divide_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ia32custom_divide_multiple_variable2IaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ia30custom_mixed_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ia19custom_variable_andIaEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ia28custom_multiple_variable_andIaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ia18custom_variable_orIaEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ia27custom_multiple_variable_orIaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ia19custom_variable_xorIaEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ia28custom_multiple_variable_xorIaEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ih19custom_add_variableIhEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1Ih19custom_add_variableIhEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ih28custom_add_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ih19custom_sub_variableIhEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ih28custom_sub_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ih24custom_multiply_variableIhEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ih33custom_multiply_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ih34custom_multiply_multiple_variable2IhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ih22custom_divide_variableIhEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ih31custom_divide_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ih32custom_divide_multiple_variable2IhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ih30custom_mixed_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ih19custom_variable_andIhEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ih28custom_multiple_variable_andIhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ih18custom_variable_orIhEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ih27custom_multiple_variable_orIhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ih19custom_variable_xorIhEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ih28custom_multiple_variable_xorIhEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Is19custom_add_variableIsEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1Is19custom_add_variableIsEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Is28custom_add_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Is19custom_sub_variableIsEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Is28custom_sub_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Is24custom_multiply_variableIsEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Is33custom_multiply_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Is34custom_multiply_multiple_variable2IsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Is22custom_divide_variableIsEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Is31custom_divide_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Is32custom_divide_multiple_variable2IsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Is30custom_mixed_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Is19custom_variable_andIsEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Is28custom_multiple_variable_andIsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Is18custom_variable_orIsEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Is27custom_multiple_variable_orIsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Is19custom_variable_xorIsEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Is28custom_multiple_variable_xorIsEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1It19custom_add_variableItEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1It19custom_add_variableItEEvPT_iS2_PKc = comdat any

$_Z14test_variable4It28custom_add_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1It19custom_sub_variableItEEvPT_iS2_PKc = comdat any

$_Z14test_variable4It28custom_sub_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1It24custom_multiply_variableItEEvPT_iS2_PKc = comdat any

$_Z14test_variable4It33custom_multiply_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4It34custom_multiply_multiple_variable2ItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1It22custom_divide_variableItEEvPT_iS2_PKc = comdat any

$_Z14test_variable4It31custom_divide_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4It32custom_divide_multiple_variable2ItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4It30custom_mixed_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1It19custom_variable_andItEEvPT_iS2_PKc = comdat any

$_Z14test_variable4It28custom_multiple_variable_andItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1It18custom_variable_orItEEvPT_iS2_PKc = comdat any

$_Z14test_variable4It27custom_multiple_variable_orItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1It19custom_variable_xorItEEvPT_iS2_PKc = comdat any

$_Z14test_variable4It28custom_multiple_variable_xorItEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ii19custom_add_variableIiEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1Ii19custom_add_variableIiEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ii28custom_add_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ii19custom_sub_variableIiEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ii28custom_sub_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ii24custom_multiply_variableIiEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ii33custom_multiply_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ii34custom_multiply_multiple_variable2IiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ii22custom_divide_variableIiEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ii31custom_divide_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ii32custom_divide_multiple_variable2IiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ii30custom_mixed_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ii19custom_variable_andIiEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ii28custom_multiple_variable_andIiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ii18custom_variable_orIiEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ii27custom_multiple_variable_orIiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ii19custom_variable_xorIiEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ii28custom_multiple_variable_xorIiEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ij19custom_add_variableIjEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1Ij19custom_add_variableIjEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ij28custom_add_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ij19custom_sub_variableIjEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ij28custom_sub_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ij24custom_multiply_variableIjEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ij33custom_multiply_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ij34custom_multiply_multiple_variable2IjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ij22custom_divide_variableIjEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ij31custom_divide_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ij32custom_divide_multiple_variable2IjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Ij30custom_mixed_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ij19custom_variable_andIjEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ij28custom_multiple_variable_andIjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ij18custom_variable_orIjEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ij27custom_multiple_variable_orIjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Ij19custom_variable_xorIjEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Ij28custom_multiple_variable_xorIjEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Il19custom_add_variableIlEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1Il19custom_add_variableIlEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Il28custom_add_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Il19custom_sub_variableIlEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Il28custom_sub_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Il24custom_multiply_variableIlEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Il33custom_multiply_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Il34custom_multiply_multiple_variable2IlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Il22custom_divide_variableIlEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Il31custom_divide_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Il32custom_divide_multiple_variable2IlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Il30custom_mixed_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Il19custom_variable_andIlEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Il28custom_multiple_variable_andIlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Il18custom_variable_orIlEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Il27custom_multiple_variable_orIlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Il19custom_variable_xorIlEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Il28custom_multiple_variable_xorIlEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Im19custom_add_variableImEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1Im19custom_add_variableImEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Im28custom_add_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Im19custom_sub_variableImEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Im28custom_sub_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Im24custom_multiply_variableImEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Im33custom_multiply_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Im34custom_multiply_multiple_variable2ImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Im22custom_divide_variableImEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Im31custom_divide_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Im32custom_divide_multiple_variable2ImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Im30custom_mixed_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Im19custom_variable_andImEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Im28custom_multiple_variable_andImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Im18custom_variable_orImEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Im27custom_multiple_variable_orImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Im19custom_variable_xorImEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Im28custom_multiple_variable_xorImEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1If19custom_add_variableIfEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1If19custom_add_variableIfEEvPT_iS2_PKc = comdat any

$_Z14test_variable4If28custom_add_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1If19custom_sub_variableIfEEvPT_iS2_PKc = comdat any

$_Z14test_variable4If28custom_sub_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1If24custom_multiply_variableIfEEvPT_iS2_PKc = comdat any

$_Z14test_variable4If33custom_multiply_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4If34custom_multiply_multiple_variable2IfEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1If22custom_divide_variableIfEEvPT_iS2_PKc = comdat any

$_Z14test_variable4If31custom_divide_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4If32custom_divide_multiple_variable2IfEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4If30custom_mixed_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Id19custom_add_variableIdEEvPT_iS2_PKc = comdat any

$_Z22test_hoisted_variable1Id19custom_add_variableIdEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Id28custom_add_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Id19custom_sub_variableIdEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Id28custom_sub_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Id24custom_multiply_variableIdEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Id33custom_multiply_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Id34custom_multiply_multiple_variable2IdEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable1Id22custom_divide_variableIdEEvPT_iS2_PKc = comdat any

$_Z14test_variable4Id31custom_divide_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Id32custom_divide_multiple_variable2IdEEvPT_iS2_S2_S2_S2_PKc = comdat any

$_Z14test_variable4Id30custom_mixed_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc = comdat any

@results = global %struct.one_result* null, align 8
@current_test = global i32 0, align 4
@allocated_results = global i32 0, align 4
@.str = private unnamed_addr constant [31 x i8] c"Could not allocate %d results\0A\00", align 1
@.str1 = private unnamed_addr constant [60 x i8] c"\0Atest %*s description   absolute   operations   ratio with\0A\00", align 1
@.str2 = private unnamed_addr constant [2 x i8] c" \00", align 1
@.str3 = private unnamed_addr constant [43 x i8] c"number %*s time       per second   test0\0A\0A\00", align 1
@.str4 = private unnamed_addr constant [43 x i8] c"%2i %*s\22%s\22  %5.2f sec   %5.2f M     %.2f\0A\00", align 1
@.str5 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@.str6 = private unnamed_addr constant [39 x i8] c"\0ATotal absolute time for %s: %.2f sec\0A\00", align 1
@.str7 = private unnamed_addr constant [20 x i8] c"\0A%s Penalty: %.2f\0A\0A\00", align 1
@.str8 = private unnamed_addr constant [34 x i8] c"\0Atest %*s description   absolute\0A\00", align 1
@.str9 = private unnamed_addr constant [18 x i8] c"number %*s time\0A\0A\00", align 1
@.str10 = private unnamed_addr constant [24 x i8] c"%2i %*s\22%s\22  %5.2f sec\0A\00", align 1
@start_time = global i64 0, align 8
@end_time = global i64 0, align 8
@iterations = global i32 1000, align 4
@init_value = global double 1.000000e+00, align 8
@dataDouble = global [8000 x double] zeroinitializer, align 16
@dataFloat = global [8000 x float] zeroinitializer, align 16
@data64unsigned = global [8000 x i64] zeroinitializer, align 16
@data64 = global [8000 x i64] zeroinitializer, align 16
@data32unsigned = global [8000 x i32] zeroinitializer, align 16
@data32 = global [8000 x i32] zeroinitializer, align 16
@data16unsigned = global [8000 x i16] zeroinitializer, align 16
@data16 = global [8000 x i16] zeroinitializer, align 16
@data8unsigned = global [8000 x i8] zeroinitializer, align 16
@data8 = global [8000 x i8] zeroinitializer, align 16
@.str11 = private unnamed_addr constant [20 x i8] c"int8_t variable add\00", align 1
@.str12 = private unnamed_addr constant [28 x i8] c"int8_t variable add hoisted\00", align 1
@.str13 = private unnamed_addr constant [30 x i8] c"int8_t multiple variable adds\00", align 1
@.str14 = private unnamed_addr constant [25 x i8] c"int8_t variable subtract\00", align 1
@.str15 = private unnamed_addr constant [35 x i8] c"int8_t multiple variable subtracts\00", align 1
@.str16 = private unnamed_addr constant [25 x i8] c"int8_t variable multiply\00", align 1
@.str17 = private unnamed_addr constant [36 x i8] c"int8_t multiple variable multiplies\00", align 1
@.str18 = private unnamed_addr constant [37 x i8] c"int8_t multiple variable multiplies2\00", align 1
@.str19 = private unnamed_addr constant [23 x i8] c"int8_t variable divide\00", align 1
@.str20 = private unnamed_addr constant [33 x i8] c"int8_t multiple variable divides\00", align 1
@.str21 = private unnamed_addr constant [34 x i8] c"int8_t multiple variable divides2\00", align 1
@.str22 = private unnamed_addr constant [31 x i8] c"int8_t multiple variable mixed\00", align 1
@.str23 = private unnamed_addr constant [20 x i8] c"int8_t variable and\00", align 1
@.str24 = private unnamed_addr constant [29 x i8] c"int8_t multiple variable and\00", align 1
@.str25 = private unnamed_addr constant [19 x i8] c"int8_t variable or\00", align 1
@.str26 = private unnamed_addr constant [28 x i8] c"int8_t multiple variable or\00", align 1
@.str27 = private unnamed_addr constant [20 x i8] c"int8_t variable xor\00", align 1
@.str28 = private unnamed_addr constant [29 x i8] c"int8_t multiple variable xor\00", align 1
@.str29 = private unnamed_addr constant [21 x i8] c"uint8_t variable add\00", align 1
@.str30 = private unnamed_addr constant [29 x i8] c"uint8_t variable add hoisted\00", align 1
@.str31 = private unnamed_addr constant [31 x i8] c"uint8_t multiple variable adds\00", align 1
@.str32 = private unnamed_addr constant [26 x i8] c"uint8_t variable subtract\00", align 1
@.str33 = private unnamed_addr constant [36 x i8] c"uint8_t multiple variable subtracts\00", align 1
@.str34 = private unnamed_addr constant [26 x i8] c"uint8_t variable multiply\00", align 1
@.str35 = private unnamed_addr constant [37 x i8] c"uint8_t multiple variable multiplies\00", align 1
@.str36 = private unnamed_addr constant [38 x i8] c"uint8_t multiple variable multiplies2\00", align 1
@.str37 = private unnamed_addr constant [24 x i8] c"uint8_t variable divide\00", align 1
@.str38 = private unnamed_addr constant [34 x i8] c"uint8_t multiple variable divides\00", align 1
@.str39 = private unnamed_addr constant [35 x i8] c"uint8_t multiple variable divides2\00", align 1
@.str40 = private unnamed_addr constant [32 x i8] c"uint8_t multiple variable mixed\00", align 1
@.str41 = private unnamed_addr constant [21 x i8] c"uint8_t variable and\00", align 1
@.str42 = private unnamed_addr constant [30 x i8] c"uint8_t multiple variable and\00", align 1
@.str43 = private unnamed_addr constant [20 x i8] c"uint8_t variable or\00", align 1
@.str44 = private unnamed_addr constant [29 x i8] c"uint8_t multiple variable or\00", align 1
@.str45 = private unnamed_addr constant [21 x i8] c"uint8_t variable xor\00", align 1
@.str46 = private unnamed_addr constant [30 x i8] c"uint8_t multiple variable xor\00", align 1
@.str47 = private unnamed_addr constant [21 x i8] c"int16_t variable add\00", align 1
@.str48 = private unnamed_addr constant [29 x i8] c"int16_t variable add hoisted\00", align 1
@.str49 = private unnamed_addr constant [31 x i8] c"int16_t multiple variable adds\00", align 1
@.str50 = private unnamed_addr constant [26 x i8] c"int16_t variable subtract\00", align 1
@.str51 = private unnamed_addr constant [36 x i8] c"int16_t multiple variable subtracts\00", align 1
@.str52 = private unnamed_addr constant [26 x i8] c"int16_t variable multiply\00", align 1
@.str53 = private unnamed_addr constant [37 x i8] c"int16_t multiple variable multiplies\00", align 1
@.str54 = private unnamed_addr constant [38 x i8] c"int16_t multiple variable multiplies2\00", align 1
@.str55 = private unnamed_addr constant [24 x i8] c"int16_t variable divide\00", align 1
@.str56 = private unnamed_addr constant [34 x i8] c"int16_t multiple variable divides\00", align 1
@.str57 = private unnamed_addr constant [35 x i8] c"int16_t multiple variable divides2\00", align 1
@.str58 = private unnamed_addr constant [32 x i8] c"int16_t multiple variable mixed\00", align 1
@.str59 = private unnamed_addr constant [21 x i8] c"int16_t variable and\00", align 1
@.str60 = private unnamed_addr constant [30 x i8] c"int16_t multiple variable and\00", align 1
@.str61 = private unnamed_addr constant [20 x i8] c"int16_t variable or\00", align 1
@.str62 = private unnamed_addr constant [29 x i8] c"int16_t multiple variable or\00", align 1
@.str63 = private unnamed_addr constant [21 x i8] c"int16_t variable xor\00", align 1
@.str64 = private unnamed_addr constant [30 x i8] c"int16_t multiple variable xor\00", align 1
@.str65 = private unnamed_addr constant [22 x i8] c"uint16_t variable add\00", align 1
@.str66 = private unnamed_addr constant [30 x i8] c"uint16_t variable add hoisted\00", align 1
@.str67 = private unnamed_addr constant [32 x i8] c"uint16_t multiple variable adds\00", align 1
@.str68 = private unnamed_addr constant [27 x i8] c"uint16_t variable subtract\00", align 1
@.str69 = private unnamed_addr constant [37 x i8] c"uint16_t multiple variable subtracts\00", align 1
@.str70 = private unnamed_addr constant [27 x i8] c"uint16_t variable multiply\00", align 1
@.str71 = private unnamed_addr constant [38 x i8] c"uint16_t multiple variable multiplies\00", align 1
@.str72 = private unnamed_addr constant [39 x i8] c"uint16_t multiple variable multiplies2\00", align 1
@.str73 = private unnamed_addr constant [25 x i8] c"uint16_t variable divide\00", align 1
@.str74 = private unnamed_addr constant [35 x i8] c"uint16_t multiple variable divides\00", align 1
@.str75 = private unnamed_addr constant [36 x i8] c"uint16_t multiple variable divides2\00", align 1
@.str76 = private unnamed_addr constant [33 x i8] c"uint16_t multiple variable mixed\00", align 1
@.str77 = private unnamed_addr constant [22 x i8] c"uint16_t variable and\00", align 1
@.str78 = private unnamed_addr constant [31 x i8] c"uint16_t multiple variable and\00", align 1
@.str79 = private unnamed_addr constant [21 x i8] c"uint16_t variable or\00", align 1
@.str80 = private unnamed_addr constant [30 x i8] c"uint16_t multiple variable or\00", align 1
@.str81 = private unnamed_addr constant [22 x i8] c"uint16_t variable xor\00", align 1
@.str82 = private unnamed_addr constant [31 x i8] c"uint16_t multiple variable xor\00", align 1
@.str83 = private unnamed_addr constant [21 x i8] c"int32_t variable add\00", align 1
@.str84 = private unnamed_addr constant [29 x i8] c"int32_t variable add hoisted\00", align 1
@.str85 = private unnamed_addr constant [31 x i8] c"int32_t multiple variable adds\00", align 1
@.str86 = private unnamed_addr constant [26 x i8] c"int32_t variable subtract\00", align 1
@.str87 = private unnamed_addr constant [36 x i8] c"int32_t multiple variable subtracts\00", align 1
@.str88 = private unnamed_addr constant [26 x i8] c"int32_t variable multiply\00", align 1
@.str89 = private unnamed_addr constant [37 x i8] c"int32_t multiple variable multiplies\00", align 1
@.str90 = private unnamed_addr constant [38 x i8] c"int32_t multiple variable multiplies2\00", align 1
@.str91 = private unnamed_addr constant [24 x i8] c"int32_t variable divide\00", align 1
@.str92 = private unnamed_addr constant [34 x i8] c"int32_t multiple variable divides\00", align 1
@.str93 = private unnamed_addr constant [35 x i8] c"int32_t multiple variable divides2\00", align 1
@.str94 = private unnamed_addr constant [32 x i8] c"int32_t multiple variable mixed\00", align 1
@.str95 = private unnamed_addr constant [21 x i8] c"int32_t variable and\00", align 1
@.str96 = private unnamed_addr constant [30 x i8] c"int32_t multiple variable and\00", align 1
@.str97 = private unnamed_addr constant [20 x i8] c"int32_t variable or\00", align 1
@.str98 = private unnamed_addr constant [29 x i8] c"int32_t multiple variable or\00", align 1
@.str99 = private unnamed_addr constant [21 x i8] c"int32_t variable xor\00", align 1
@.str100 = private unnamed_addr constant [30 x i8] c"int32_t multiple variable xor\00", align 1
@.str101 = private unnamed_addr constant [22 x i8] c"uint32_t variable add\00", align 1
@.str102 = private unnamed_addr constant [30 x i8] c"uint32_t variable add hoisted\00", align 1
@.str103 = private unnamed_addr constant [32 x i8] c"uint32_t multiple variable adds\00", align 1
@.str104 = private unnamed_addr constant [27 x i8] c"uint32_t variable subtract\00", align 1
@.str105 = private unnamed_addr constant [37 x i8] c"uint32_t multiple variable subtracts\00", align 1
@.str106 = private unnamed_addr constant [27 x i8] c"uint32_t variable multiply\00", align 1
@.str107 = private unnamed_addr constant [38 x i8] c"uint32_t multiple variable multiplies\00", align 1
@.str108 = private unnamed_addr constant [39 x i8] c"uint32_t multiple variable multiplies2\00", align 1
@.str109 = private unnamed_addr constant [25 x i8] c"uint32_t variable divide\00", align 1
@.str110 = private unnamed_addr constant [35 x i8] c"uint32_t multiple variable divides\00", align 1
@.str111 = private unnamed_addr constant [36 x i8] c"uint32_t multiple variable divides2\00", align 1
@.str112 = private unnamed_addr constant [33 x i8] c"uint32_t multiple variable mixed\00", align 1
@.str113 = private unnamed_addr constant [22 x i8] c"uint32_t variable and\00", align 1
@.str114 = private unnamed_addr constant [31 x i8] c"uint32_t multiple variable and\00", align 1
@.str115 = private unnamed_addr constant [21 x i8] c"uint32_t variable or\00", align 1
@.str116 = private unnamed_addr constant [30 x i8] c"uint32_t multiple variable or\00", align 1
@.str117 = private unnamed_addr constant [22 x i8] c"uint32_t variable xor\00", align 1
@.str118 = private unnamed_addr constant [31 x i8] c"uint32_t multiple variable xor\00", align 1
@.str119 = private unnamed_addr constant [21 x i8] c"int64_t variable add\00", align 1
@.str120 = private unnamed_addr constant [29 x i8] c"int64_t variable add hoisted\00", align 1
@.str121 = private unnamed_addr constant [31 x i8] c"int64_t multiple variable adds\00", align 1
@.str122 = private unnamed_addr constant [26 x i8] c"int64_t variable subtract\00", align 1
@.str123 = private unnamed_addr constant [36 x i8] c"int64_t multiple variable subtracts\00", align 1
@.str124 = private unnamed_addr constant [26 x i8] c"int64_t variable multiply\00", align 1
@.str125 = private unnamed_addr constant [37 x i8] c"int64_t multiple variable multiplies\00", align 1
@.str126 = private unnamed_addr constant [38 x i8] c"int64_t multiple variable multiplies2\00", align 1
@.str127 = private unnamed_addr constant [24 x i8] c"int64_t variable divide\00", align 1
@.str128 = private unnamed_addr constant [34 x i8] c"int64_t multiple variable divides\00", align 1
@.str129 = private unnamed_addr constant [35 x i8] c"int64_t multiple variable divides2\00", align 1
@.str130 = private unnamed_addr constant [32 x i8] c"int64_t multiple variable mixed\00", align 1
@.str131 = private unnamed_addr constant [21 x i8] c"int64_t variable and\00", align 1
@.str132 = private unnamed_addr constant [30 x i8] c"int64_t multiple variable and\00", align 1
@.str133 = private unnamed_addr constant [20 x i8] c"int64_t variable or\00", align 1
@.str134 = private unnamed_addr constant [29 x i8] c"int64_t multiple variable or\00", align 1
@.str135 = private unnamed_addr constant [21 x i8] c"int64_t variable xor\00", align 1
@.str136 = private unnamed_addr constant [30 x i8] c"int64_t multiple variable xor\00", align 1
@.str137 = private unnamed_addr constant [22 x i8] c"uint64_t variable add\00", align 1
@.str138 = private unnamed_addr constant [30 x i8] c"uint64_t variable add hoisted\00", align 1
@.str139 = private unnamed_addr constant [32 x i8] c"uint64_t multiple variable adds\00", align 1
@.str140 = private unnamed_addr constant [27 x i8] c"uint64_t variable subtract\00", align 1
@.str141 = private unnamed_addr constant [37 x i8] c"uint64_t multiple variable subtracts\00", align 1
@.str142 = private unnamed_addr constant [27 x i8] c"uint64_t variable multiply\00", align 1
@.str143 = private unnamed_addr constant [38 x i8] c"uint64_t multiple variable multiplies\00", align 1
@.str144 = private unnamed_addr constant [39 x i8] c"uint64_t multiple variable multiplies2\00", align 1
@.str145 = private unnamed_addr constant [25 x i8] c"uint64_t variable divide\00", align 1
@.str146 = private unnamed_addr constant [35 x i8] c"uint64_t multiple variable divides\00", align 1
@.str147 = private unnamed_addr constant [36 x i8] c"uint64_t multiple variable divides2\00", align 1
@.str148 = private unnamed_addr constant [33 x i8] c"uint64_t multiple variable mixed\00", align 1
@.str149 = private unnamed_addr constant [22 x i8] c"uint64_t variable and\00", align 1
@.str150 = private unnamed_addr constant [31 x i8] c"uint64_t multiple variable and\00", align 1
@.str151 = private unnamed_addr constant [21 x i8] c"uint64_t variable or\00", align 1
@.str152 = private unnamed_addr constant [30 x i8] c"uint64_t multiple variable or\00", align 1
@.str153 = private unnamed_addr constant [22 x i8] c"uint64_t variable xor\00", align 1
@.str154 = private unnamed_addr constant [31 x i8] c"uint64_t multiple variable xor\00", align 1
@.str155 = private unnamed_addr constant [19 x i8] c"float variable add\00", align 1
@.str156 = private unnamed_addr constant [27 x i8] c"float variable add hoisted\00", align 1
@.str157 = private unnamed_addr constant [29 x i8] c"float multiple variable adds\00", align 1
@.str158 = private unnamed_addr constant [24 x i8] c"float variable subtract\00", align 1
@.str159 = private unnamed_addr constant [34 x i8] c"float multiple variable subtracts\00", align 1
@.str160 = private unnamed_addr constant [24 x i8] c"float variable multiply\00", align 1
@.str161 = private unnamed_addr constant [35 x i8] c"float multiple variable multiplies\00", align 1
@.str162 = private unnamed_addr constant [36 x i8] c"float multiple variable multiplies2\00", align 1
@.str163 = private unnamed_addr constant [22 x i8] c"float variable divide\00", align 1
@.str164 = private unnamed_addr constant [32 x i8] c"float multiple variable divides\00", align 1
@.str165 = private unnamed_addr constant [33 x i8] c"float multiple variable divides2\00", align 1
@.str166 = private unnamed_addr constant [30 x i8] c"float multiple variable mixed\00", align 1
@.str167 = private unnamed_addr constant [20 x i8] c"double variable add\00", align 1
@.str168 = private unnamed_addr constant [28 x i8] c"double variable add hoisted\00", align 1
@.str169 = private unnamed_addr constant [30 x i8] c"double multiple variable adds\00", align 1
@.str170 = private unnamed_addr constant [25 x i8] c"double variable subtract\00", align 1
@.str171 = private unnamed_addr constant [35 x i8] c"double multiple variable subtracts\00", align 1
@.str172 = private unnamed_addr constant [25 x i8] c"double variable multiply\00", align 1
@.str173 = private unnamed_addr constant [36 x i8] c"double multiple variable multiplies\00", align 1
@.str174 = private unnamed_addr constant [37 x i8] c"double multiple variable multiplies2\00", align 1
@.str175 = private unnamed_addr constant [23 x i8] c"double variable divide\00", align 1
@.str176 = private unnamed_addr constant [33 x i8] c"double multiple variable divides\00", align 1
@.str177 = private unnamed_addr constant [34 x i8] c"double multiple variable divides2\00", align 1
@.str178 = private unnamed_addr constant [31 x i8] c"double multiple variable mixed\00", align 1
@.str179 = private unnamed_addr constant [16 x i8] c"test %i failed\0A\00", align 1

; Function Attrs: nounwind uwtable
define void @_Z13record_resultdPKc(double %time, i8* %label) #0 {
entry:
  %0 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp = icmp eq %struct.one_result* %0, null
  %1 = bitcast %struct.one_result* %0 to i8*
  br i1 %cmp, label %entry.if.then_crit_edge, label %lor.lhs.false

entry.if.then_crit_edge:                          ; preds = %entry
  %.pre = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* @current_test, align 4, !tbaa !5
  %3 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1 = icmp slt i32 %2, %3
  br i1 %cmp1, label %if.end5, label %if.then

if.then:                                          ; preds = %entry.if.then_crit_edge, %lor.lhs.false
  %4 = phi i32 [ %.pre, %entry.if.then_crit_edge ], [ %3, %lor.lhs.false ]
  %add = add nsw i32 %4, 10
  store i32 %add, i32* @allocated_results, align 4, !tbaa !5
  %conv = sext i32 %add to i64
  %mul = shl nsw i64 %conv, 4
  %call = tail call i8* @realloc(i8* %1, i64 %mul) #5
  store i8* %call, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2 = icmp eq i8* %call, null
  br i1 %cmp2, label %if.then3, label %if.then.if.end5_crit_edge

if.then.if.end5_crit_edge:                        ; preds = %if.then
  %5 = bitcast i8* %call to %struct.one_result*
  %.pre10 = load i32, i32* @current_test, align 4, !tbaa !5
  br label %if.end5

if.then3:                                         ; preds = %if.then
  %6 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %6)
  tail call void @exit(i32 -1) #6
  unreachable

if.end5:                                          ; preds = %if.then.if.end5_crit_edge, %lor.lhs.false
  %7 = phi %struct.one_result* [ %5, %if.then.if.end5_crit_edge ], [ %0, %lor.lhs.false ]
  %8 = phi i32 [ %.pre10, %if.then.if.end5_crit_edge ], [ %2, %lor.lhs.false ]
  %idxprom = sext i32 %8 to i64
  %time6 = getelementptr inbounds %struct.one_result, %struct.one_result* %7, i64 %idxprom, i32 0
  store double %time, double* %time6, align 8, !tbaa !7
  %label9 = getelementptr inbounds %struct.one_result, %struct.one_result* %7, i64 %idxprom, i32 1
  store i8* %label, i8** %label9, align 8, !tbaa !10
  %inc = add nsw i32 %8, 1
  store i32 %inc, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind
declare noalias i8* @realloc(i8* nocapture, i64) #1

; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #1

; Function Attrs: noreturn nounwind
declare void @exit(i32) #2

; Function Attrs: nounwind uwtable
define void @_Z9summarizePKciiii(i8* %name, i32 %size, i32 %iterations, i32 %show_gmeans, i32 %show_penalty) #0 {
entry:
  %conv = sitofp i32 %size to double
  %conv1 = sitofp i32 %iterations to double
  %mul = fmul double %conv, %conv1
  %div = fdiv double %mul, 1.000000e+06
  %0 = load i32, i32* @current_test, align 4, !tbaa !5
  %cmp77 = icmp sgt i32 %0, 0
  br i1 %cmp77, label %for.body.preheader, label %for.end

for.body.preheader:                               ; preds = %entry
  %1 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %2 = sext i32 %0 to i64
  br label %for.body

for.body:                                         ; preds = %for.body.preheader, %for.body
  %indvars.iv86 = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next87, %for.body ]
  %longest_label_len.079.reg2mem.0 = phi i32 [ 12, %for.body.preheader ], [ %conv2.longest_label_len.0, %for.body ]
  %label = getelementptr inbounds %struct.one_result, %struct.one_result* %1, i64 %indvars.iv86, i32 1
  %3 = load i8*, i8** %label, align 8, !tbaa !10
  %call = tail call i64 @strlen(i8* %3) #7
  %conv2 = trunc i64 %call to i32
  %cmp3 = icmp sgt i32 %conv2, %longest_label_len.079.reg2mem.0
  %conv2.longest_label_len.0 = select i1 %cmp3, i32 %conv2, i32 %longest_label_len.079.reg2mem.0
  %indvars.iv.next87 = add nuw nsw i64 %indvars.iv86, 1
  %cmp = icmp slt i64 %indvars.iv.next87, %2
  br i1 %cmp, label %for.body, label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body
  %conv2.longest_label_len.0.lcssa = phi i32 [ %conv2.longest_label_len.0, %for.body ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %entry
  %longest_label_len.0.lcssa.reg2mem.0 = phi i32 [ 12, %entry ], [ %conv2.longest_label_len.0.lcssa, %for.end.loopexit ]
  %sub = add nsw i32 %longest_label_len.0.lcssa.reg2mem.0, -12
  %call4 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str1, i64 0, i64 0), i32 %sub, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i64 0, i64 0))
  %call5 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str3, i64 0, i64 0), i32 %longest_label_len.0.lcssa.reg2mem.0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i64 0, i64 0))
  %4 = load i32, i32* @current_test, align 4, !tbaa !5
  %cmp775 = icmp sgt i32 %4, 0
  br i1 %cmp775, label %for.body8.preheader, label %for.end43

for.body8.preheader:                              ; preds = %for.end
  %conv967 = zext i32 %longest_label_len.0.lcssa.reg2mem.0 to i64
  br label %for.body8

for.cond35.preheader:                             ; preds = %for.body8
  %.lcssa95 = phi i64 [ %12, %for.body8 ]
  %.lcssa94 = phi i32 [ %11, %for.body8 ]
  %cmp3671 = icmp sgt i32 %.lcssa94, 0
  br i1 %cmp3671, label %for.inc41.preheader, label %for.end43

for.inc41.preheader:                              ; preds = %for.cond35.preheader
  %5 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  br label %for.inc41

for.body8:                                        ; preds = %for.body8.preheader, %for.body8
  %indvars.iv84 = phi i64 [ 0, %for.body8.preheader ], [ %indvars.iv.next85, %for.body8 ]
  %6 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %label12 = getelementptr inbounds %struct.one_result, %struct.one_result* %6, i64 %indvars.iv84, i32 1
  %7 = load i8*, i8** %label12, align 8, !tbaa !10
  %call13 = tail call i64 @strlen(i8* %7) #7
  %sub14 = sub i64 %conv967, %call13
  %conv15 = trunc i64 %sub14 to i32
  %time = getelementptr inbounds %struct.one_result, %struct.one_result* %6, i64 %indvars.iv84, i32 0
  %8 = load double, double* %time, align 8, !tbaa !7
  %div24 = fdiv double %div, %8
  %time29 = getelementptr inbounds %struct.one_result, %struct.one_result* %6, i64 0, i32 0
  %9 = load double, double* %time29, align 8, !tbaa !7
  %div30 = fdiv double %8, %9
  %10 = trunc i64 %indvars.iv84 to i32
  %call31 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str4, i64 0, i64 0), i32 %10, i32 %conv15, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str5, i64 0, i64 0), i8* %7, double %8, double %div24, double %div30)
  %indvars.iv.next85 = add nuw nsw i64 %indvars.iv84, 1
  %11 = load i32, i32* @current_test, align 4, !tbaa !5
  %12 = sext i32 %11 to i64
  %cmp7 = icmp slt i64 %indvars.iv.next85, %12
  br i1 %cmp7, label %for.body8, label %for.cond35.preheader

for.inc41:                                        ; preds = %for.inc41.preheader, %for.inc41
  %indvars.iv82 = phi i64 [ 0, %for.inc41.preheader ], [ %indvars.iv.next83, %for.inc41 ]
  %total_absolute_times.073.reg2mem.0 = phi double [ 0.000000e+00, %for.inc41.preheader ], [ %add, %for.inc41 ]
  %time40 = getelementptr inbounds %struct.one_result, %struct.one_result* %5, i64 %indvars.iv82, i32 0
  %13 = load double, double* %time40, align 8, !tbaa !7
  %add = fadd double %total_absolute_times.073.reg2mem.0, %13
  %indvars.iv.next83 = add nuw nsw i64 %indvars.iv82, 1
  %cmp36 = icmp slt i64 %indvars.iv.next83, %.lcssa95
  br i1 %cmp36, label %for.inc41, label %for.end43.loopexit

for.end43.loopexit:                               ; preds = %for.inc41
  %add.lcssa = phi double [ %add, %for.inc41 ]
  br label %for.end43

for.end43:                                        ; preds = %for.end43.loopexit, %for.end, %for.cond35.preheader
  %total_absolute_times.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond35.preheader ], [ 0.000000e+00, %for.end ], [ %add.lcssa, %for.end43.loopexit ]
  %call44 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str6, i64 0, i64 0), i8* %name, double %total_absolute_times.0.lcssa.reg2mem.0)
  %14 = load i32, i32* @current_test, align 4, !tbaa !5
  %cmp45 = icmp slt i32 %14, 2
  %tobool = icmp eq i32 %show_penalty, 0
  %or.cond = or i1 %tobool, %cmp45
  br i1 %or.cond, label %if.end66, label %for.cond47.preheader

for.cond47.preheader:                             ; preds = %for.end43
  %cmp4868 = icmp sgt i32 %14, 1
  br i1 %cmp4868, label %for.body49.preheader, label %for.end60

for.body49.preheader:                             ; preds = %for.cond47.preheader
  br label %for.body49

for.body49:                                       ; preds = %for.body49.preheader, %for.body49
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body49 ], [ 1, %for.body49.preheader ]
  %gmean_ratio.070.reg2mem.0 = phi double [ %add57, %for.body49 ], [ 0.000000e+00, %for.body49.preheader ]
  %15 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %time52 = getelementptr inbounds %struct.one_result, %struct.one_result* %15, i64 %indvars.iv, i32 0
  %16 = load double, double* %time52, align 8, !tbaa !7
  %time54 = getelementptr inbounds %struct.one_result, %struct.one_result* %15, i64 0, i32 0
  %17 = load double, double* %time54, align 8, !tbaa !7
  %div55 = fdiv double %16, %17
  %call56 = tail call double @log(double %div55) #5
  %add57 = fadd double %gmean_ratio.070.reg2mem.0, %call56
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %18 = load i32, i32* @current_test, align 4, !tbaa !5
  %19 = sext i32 %18 to i64
  %cmp48 = icmp slt i64 %indvars.iv.next, %19
  br i1 %cmp48, label %for.body49, label %for.end60.loopexit

for.end60.loopexit:                               ; preds = %for.body49
  %.lcssa = phi i32 [ %18, %for.body49 ]
  %add57.lcssa = phi double [ %add57, %for.body49 ]
  br label %for.end60

for.end60:                                        ; preds = %for.end60.loopexit, %for.cond47.preheader
  %20 = phi i32 [ %14, %for.cond47.preheader ], [ %.lcssa, %for.end60.loopexit ]
  %gmean_ratio.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond47.preheader ], [ %add57.lcssa, %for.end60.loopexit ]
  %sub61 = add nsw i32 %20, -1
  %conv62 = sitofp i32 %sub61 to double
  %div63 = fdiv double %gmean_ratio.0.lcssa.reg2mem.0, %conv62
  %call64 = tail call double @exp(double %div63) #5
  %call65 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str7, i64 0, i64 0), i8* %name, double %call64)
  br label %if.end66

if.end66:                                         ; preds = %for.end43, %for.end60
  store i32 0, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind readonly
declare i64 @strlen(i8* nocapture) #3

; Function Attrs: nounwind
declare double @log(double) #1

; Function Attrs: nounwind
declare double @exp(double) #1

; Function Attrs: nounwind uwtable
define void @_Z17summarize_simplefP8_IO_FILEPKc(%struct._IO_FILE* nocapture %output, i8* %name) #0 {
entry:
  %0 = load i32, i32* @current_test, align 4, !tbaa !5
  %cmp39 = icmp sgt i32 %0, 0
  br i1 %cmp39, label %for.body.preheader, label %for.end

for.body.preheader:                               ; preds = %entry
  %1 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %2 = sext i32 %0 to i64
  br label %for.body

for.body:                                         ; preds = %for.body.preheader, %for.body
  %indvars.iv46 = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next47, %for.body ]
  %longest_label_len.041.reg2mem.0 = phi i32 [ 12, %for.body.preheader ], [ %conv.longest_label_len.0, %for.body ]
  %label = getelementptr inbounds %struct.one_result, %struct.one_result* %1, i64 %indvars.iv46, i32 1
  %3 = load i8*, i8** %label, align 8, !tbaa !10
  %call = tail call i64 @strlen(i8* %3) #7
  %conv = trunc i64 %call to i32
  %cmp1 = icmp sgt i32 %conv, %longest_label_len.041.reg2mem.0
  %conv.longest_label_len.0 = select i1 %cmp1, i32 %conv, i32 %longest_label_len.041.reg2mem.0
  %indvars.iv.next47 = add nuw nsw i64 %indvars.iv46, 1
  %cmp = icmp slt i64 %indvars.iv.next47, %2
  br i1 %cmp, label %for.body, label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body
  %conv.longest_label_len.0.lcssa = phi i32 [ %conv.longest_label_len.0, %for.body ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %entry
  %longest_label_len.0.lcssa.reg2mem.0 = phi i32 [ 12, %entry ], [ %conv.longest_label_len.0.lcssa, %for.end.loopexit ]
  %sub = add nsw i32 %longest_label_len.0.lcssa.reg2mem.0, -12
  %call2 = tail call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %output, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str8, i64 0, i64 0), i32 %sub, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i64 0, i64 0))
  %call3 = tail call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %output, i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str9, i64 0, i64 0), i32 %longest_label_len.0.lcssa.reg2mem.0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i64 0, i64 0))
  %4 = load i32, i32* @current_test, align 4, !tbaa !5
  %cmp537 = icmp sgt i32 %4, 0
  br i1 %cmp537, label %for.body6.preheader, label %for.end31

for.body6.preheader:                              ; preds = %for.end
  %conv733 = zext i32 %longest_label_len.0.lcssa.reg2mem.0 to i64
  br label %for.body6

for.cond23.preheader:                             ; preds = %for.body6
  %.lcssa51 = phi i64 [ %11, %for.body6 ]
  %.lcssa = phi i32 [ %10, %for.body6 ]
  %cmp2434 = icmp sgt i32 %.lcssa, 0
  br i1 %cmp2434, label %for.inc29.preheader, label %for.end31

for.inc29.preheader:                              ; preds = %for.cond23.preheader
  %5 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  br label %for.inc29

for.body6:                                        ; preds = %for.body6.preheader, %for.body6
  %indvars.iv44 = phi i64 [ 0, %for.body6.preheader ], [ %indvars.iv.next45, %for.body6 ]
  %6 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %label10 = getelementptr inbounds %struct.one_result, %struct.one_result* %6, i64 %indvars.iv44, i32 1
  %7 = load i8*, i8** %label10, align 8, !tbaa !10
  %call11 = tail call i64 @strlen(i8* %7) #7
  %sub12 = sub i64 %conv733, %call11
  %conv13 = trunc i64 %sub12 to i32
  %time = getelementptr inbounds %struct.one_result, %struct.one_result* %6, i64 %indvars.iv44, i32 0
  %8 = load double, double* %time, align 8, !tbaa !7
  %9 = trunc i64 %indvars.iv44 to i32
  %call19 = tail call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %output, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str10, i64 0, i64 0), i32 %9, i32 %conv13, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str5, i64 0, i64 0), i8* %7, double %8)
  %indvars.iv.next45 = add nuw nsw i64 %indvars.iv44, 1
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %11 = sext i32 %10 to i64
  %cmp5 = icmp slt i64 %indvars.iv.next45, %11
  br i1 %cmp5, label %for.body6, label %for.cond23.preheader

for.inc29:                                        ; preds = %for.inc29.preheader, %for.inc29
  %indvars.iv = phi i64 [ 0, %for.inc29.preheader ], [ %indvars.iv.next, %for.inc29 ]
  %total_absolute_times.036.reg2mem.0 = phi double [ 0.000000e+00, %for.inc29.preheader ], [ %add, %for.inc29 ]
  %time28 = getelementptr inbounds %struct.one_result, %struct.one_result* %5, i64 %indvars.iv, i32 0
  %12 = load double, double* %time28, align 8, !tbaa !7
  %add = fadd double %total_absolute_times.036.reg2mem.0, %12
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %cmp24 = icmp slt i64 %indvars.iv.next, %.lcssa51
  br i1 %cmp24, label %for.inc29, label %for.end31.loopexit

for.end31.loopexit:                               ; preds = %for.inc29
  %add.lcssa = phi double [ %add, %for.inc29 ]
  br label %for.end31

for.end31:                                        ; preds = %for.end31.loopexit, %for.end, %for.cond23.preheader
  %total_absolute_times.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond23.preheader ], [ 0.000000e+00, %for.end ], [ %add.lcssa, %for.end31.loopexit ]
  %call32 = tail call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %output, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str6, i64 0, i64 0), i8* %name, double %total_absolute_times.0.lcssa.reg2mem.0)
  store i32 0, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind
declare i32 @fprintf(%struct._IO_FILE* nocapture, i8* nocapture readonly, ...) #1

; Function Attrs: nounwind uwtable
define void @_Z11start_timerv() #0 {
entry:
  %call = tail call i64 @clock() #5
  store i64 %call, i64* @start_time, align 8, !tbaa !11
  ret void
}

; Function Attrs: nounwind
declare i64 @clock() #1

; Function Attrs: nounwind uwtable
define double @_Z5timerv() #0 {
entry:
  %call = tail call i64 @clock() #5
  store i64 %call, i64* @end_time, align 8, !tbaa !11
  %0 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub = sub nsw i64 %call, %0
  %conv = sitofp i64 %sub to double
  %div = fdiv double %conv, 1.000000e+06
  ret double %div
}

; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #0 {
entry:
  %cmp = icmp sgt i32 %argc, 1
  br i1 %cmp, label %if.end, label %if.end10

if.end:                                           ; preds = %entry
  %arrayidx = getelementptr inbounds i8*, i8** %argv, i64 1
  %0 = load i8*, i8** %arrayidx, align 8, !tbaa !1
  %call.i = tail call i64 @strtol(i8* nocapture %0, i8** null, i32 10) #5
  %conv.i = trunc i64 %call.i to i32
  store i32 %conv.i, i32* @iterations, align 4, !tbaa !5
  %cmp1 = icmp sgt i32 %argc, 2
  br i1 %cmp1, label %if.end5, label %if.end10

if.end5:                                          ; preds = %if.end
  %arrayidx3 = getelementptr inbounds i8*, i8** %argv, i64 2
  %1 = load i8*, i8** %arrayidx3, align 8, !tbaa !1
  %call.i103 = tail call double @strtod(i8* nocapture %1, i8** null) #5
  store double %call.i103, double* @init_value, align 8, !tbaa !13
  %cmp6 = icmp sgt i32 %argc, 3
  br i1 %cmp6, label %if.then7, label %if.end10

if.then7:                                         ; preds = %if.end5
  %arrayidx8 = getelementptr inbounds i8*, i8** %argv, i64 3
  %2 = load i8*, i8** %arrayidx8, align 8, !tbaa !1
  %call.i104 = tail call double @strtod(i8* nocapture %2, i8** null) #5
  br label %if.end10

if.end10:                                         ; preds = %entry, %if.end, %if.then7, %if.end5
  %temp.0.reg2mem.0 = phi double [ %call.i104, %if.then7 ], [ 1.000000e+00, %if.end5 ], [ 1.000000e+00, %if.end ], [ 1.000000e+00, %entry ]
  %3 = load double, double* @init_value, align 8, !tbaa !13
  %conv = fptosi double %3 to i8
  tail call void @llvm.memset.p0i8.i64(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i8 %conv, i64 8000, i32 16, i1 false) #5
  %conv11 = fptosi double %temp.0.reg2mem.0 to i8
  %mul = shl i8 %conv11, 1
  %add = add i8 %conv11, 2
  %conv1698 = zext i8 %conv11 to i32
  %conv17 = sext i8 %mul to i32
  %conv18 = sext i8 %add to i32
  %div = sdiv i32 %conv17, %conv18
  %add19 = add i32 %div, %conv1698
  %conv20 = trunc i32 %add19 to i8
  tail call void @_Z14test_variable1Ia19custom_add_variableIaEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str11, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1Ia19custom_add_variableIaEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str12, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia28custom_add_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str13, i64 0, i64 0))
  tail call void @_Z14test_variable1Ia19custom_sub_variableIaEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str14, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia28custom_sub_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str15, i64 0, i64 0))
  tail call void @_Z14test_variable1Ia24custom_multiply_variableIaEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str16, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia33custom_multiply_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str17, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia34custom_multiply_multiple_variable2IaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str18, i64 0, i64 0))
  tail call void @_Z14test_variable1Ia22custom_divide_variableIaEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str19, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia31custom_divide_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str20, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia32custom_divide_multiple_variable2IaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str21, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia30custom_mixed_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str22, i64 0, i64 0))
  tail call void @_Z14test_variable1Ia19custom_variable_andIaEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str23, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia28custom_multiple_variable_andIaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str24, i64 0, i64 0))
  tail call void @_Z14test_variable1Ia18custom_variable_orIaEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str25, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia27custom_multiple_variable_orIaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str26, i64 0, i64 0))
  tail call void @_Z14test_variable1Ia19custom_variable_xorIaEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str27, i64 0, i64 0))
  tail call void @_Z14test_variable4Ia28custom_multiple_variable_xorIaEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8, i64 0, i64 0), i32 8000, i8 signext %conv11, i8 signext %mul, i8 signext %add, i8 signext %conv20, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str28, i64 0, i64 0))
  %4 = load double, double* @init_value, align 8, !tbaa !13
  %conv21 = fptoui double %4 to i8
  tail call void @llvm.memset.p0i8.i64(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i8 %conv21, i64 8000, i32 16, i1 false) #5
  %conv22 = fptoui double %temp.0.reg2mem.0 to i8
  %mul24 = shl i8 %conv22, 1
  %add27 = add i8 %conv22, 2
  %div99 = udiv i8 %mul24, %add27
  %add33 = add i8 %div99, %conv22
  tail call void @_Z14test_variable1Ih19custom_add_variableIhEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str29, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1Ih19custom_add_variableIhEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str30, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih28custom_add_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str31, i64 0, i64 0))
  tail call void @_Z14test_variable1Ih19custom_sub_variableIhEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str32, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih28custom_sub_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str33, i64 0, i64 0))
  tail call void @_Z14test_variable1Ih24custom_multiply_variableIhEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str34, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih33custom_multiply_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str35, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih34custom_multiply_multiple_variable2IhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str36, i64 0, i64 0))
  tail call void @_Z14test_variable1Ih22custom_divide_variableIhEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str37, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih31custom_divide_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str38, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih32custom_divide_multiple_variable2IhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str39, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih30custom_mixed_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str40, i64 0, i64 0))
  tail call void @_Z14test_variable1Ih19custom_variable_andIhEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str41, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih28custom_multiple_variable_andIhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str42, i64 0, i64 0))
  tail call void @_Z14test_variable1Ih18custom_variable_orIhEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str43, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih27custom_multiple_variable_orIhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str44, i64 0, i64 0))
  tail call void @_Z14test_variable1Ih19custom_variable_xorIhEEvPT_iS2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str45, i64 0, i64 0))
  tail call void @_Z14test_variable4Ih28custom_multiple_variable_xorIhEEvPT_iS2_S2_S2_S2_PKc(i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @data8unsigned, i64 0, i64 0), i32 8000, i8 zeroext %conv22, i8 zeroext %mul24, i8 zeroext %add27, i8 zeroext %add33, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str46, i64 0, i64 0))
  %5 = load double, double* @init_value, align 8, !tbaa !13
  %conv35 = fptosi double %5 to i16
  %broadcast.splatinsert = insertelement <8 x i16> undef, i16 %conv35, i32 0
  %broadcast.splat = shufflevector <8 x i16> %broadcast.splatinsert, <8 x i16> undef, <8 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %if.end10
  %index = phi i64 [ 0, %if.end10 ], [ %index.next.4, %vector.body ]
  %next.gep = getelementptr [8000 x i16], [8000 x i16]* @data16, i64 0, i64 %index
  %6 = bitcast i16* %next.gep to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %6, align 16, !tbaa !14
  %7 = getelementptr i16, i16* %next.gep, i64 8
  %8 = bitcast i16* %7 to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %8, align 16, !tbaa !14
  %index.next = add nuw nsw i64 %index, 16
  %next.gep.1 = getelementptr [8000 x i16], [8000 x i16]* @data16, i64 0, i64 %index.next
  %9 = bitcast i16* %next.gep.1 to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %9, align 16, !tbaa !14
  %10 = getelementptr i16, i16* %next.gep.1, i64 8
  %11 = bitcast i16* %10 to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %11, align 16, !tbaa !14
  %index.next.1 = add nuw nsw i64 %index.next, 16
  %next.gep.2 = getelementptr [8000 x i16], [8000 x i16]* @data16, i64 0, i64 %index.next.1
  %12 = bitcast i16* %next.gep.2 to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %12, align 16, !tbaa !14
  %13 = getelementptr i16, i16* %next.gep.2, i64 8
  %14 = bitcast i16* %13 to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %14, align 16, !tbaa !14
  %index.next.2 = add nuw nsw i64 %index.next.1, 16
  %next.gep.3 = getelementptr [8000 x i16], [8000 x i16]* @data16, i64 0, i64 %index.next.2
  %15 = bitcast i16* %next.gep.3 to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %15, align 16, !tbaa !14
  %16 = getelementptr i16, i16* %next.gep.3, i64 8
  %17 = bitcast i16* %16 to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %17, align 16, !tbaa !14
  %index.next.3 = add nuw nsw i64 %index.next.2, 16
  %next.gep.4 = getelementptr [8000 x i16], [8000 x i16]* @data16, i64 0, i64 %index.next.3
  %18 = bitcast i16* %next.gep.4 to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %18, align 16, !tbaa !14
  %19 = getelementptr i16, i16* %next.gep.4, i64 8
  %20 = bitcast i16* %19 to <8 x i16>*
  store <8 x i16> %broadcast.splat, <8 x i16>* %20, align 16, !tbaa !14
  %index.next.4 = add nuw nsw i64 %index.next.3, 16
  %21 = icmp eq i64 %index.next.4, 8000
  br i1 %21, label %_Z4fillIPssEvT_S1_T0_.exit, label %vector.body, !llvm.loop !16

_Z4fillIPssEvT_S1_T0_.exit:                       ; preds = %vector.body
  %conv36 = fptosi double %temp.0.reg2mem.0 to i16
  %mul38 = shl i16 %conv36, 1
  %add41 = add i16 %conv36, 2
  %conv43101 = zext i16 %conv36 to i32
  %conv44 = sext i16 %mul38 to i32
  %conv45 = sext i16 %add41 to i32
  %div46 = sdiv i32 %conv44, %conv45
  %add47 = add i32 %div46, %conv43101
  %conv48 = trunc i32 %add47 to i16
  tail call void @_Z14test_variable1Is19custom_add_variableIsEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str47, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1Is19custom_add_variableIsEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str48, i64 0, i64 0))
  tail call void @_Z14test_variable4Is28custom_add_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str49, i64 0, i64 0))
  tail call void @_Z14test_variable1Is19custom_sub_variableIsEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str50, i64 0, i64 0))
  tail call void @_Z14test_variable4Is28custom_sub_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str51, i64 0, i64 0))
  tail call void @_Z14test_variable1Is24custom_multiply_variableIsEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str52, i64 0, i64 0))
  tail call void @_Z14test_variable4Is33custom_multiply_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str53, i64 0, i64 0))
  tail call void @_Z14test_variable4Is34custom_multiply_multiple_variable2IsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str54, i64 0, i64 0))
  tail call void @_Z14test_variable1Is22custom_divide_variableIsEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str55, i64 0, i64 0))
  tail call void @_Z14test_variable4Is31custom_divide_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str56, i64 0, i64 0))
  tail call void @_Z14test_variable4Is32custom_divide_multiple_variable2IsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str57, i64 0, i64 0))
  tail call void @_Z14test_variable4Is30custom_mixed_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str58, i64 0, i64 0))
  tail call void @_Z14test_variable1Is19custom_variable_andIsEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str59, i64 0, i64 0))
  tail call void @_Z14test_variable4Is28custom_multiple_variable_andIsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str60, i64 0, i64 0))
  tail call void @_Z14test_variable1Is18custom_variable_orIsEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str61, i64 0, i64 0))
  tail call void @_Z14test_variable4Is27custom_multiple_variable_orIsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str62, i64 0, i64 0))
  tail call void @_Z14test_variable1Is19custom_variable_xorIsEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str63, i64 0, i64 0))
  tail call void @_Z14test_variable4Is28custom_multiple_variable_xorIsEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16, i64 0, i64 0), i32 8000, i16 signext %conv36, i16 signext %mul38, i16 signext %add41, i16 signext %conv48, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str64, i64 0, i64 0))
  %22 = load double, double* @init_value, align 8, !tbaa !13
  %conv49 = fptoui double %22 to i16
  %broadcast.splatinsert211 = insertelement <8 x i16> undef, i16 %conv49, i32 0
  %broadcast.splat212 = shufflevector <8 x i16> %broadcast.splatinsert211, <8 x i16> undef, <8 x i32> zeroinitializer
  br label %vector.body168

vector.body168:                                   ; preds = %vector.body168, %_Z4fillIPssEvT_S1_T0_.exit
  %index171 = phi i64 [ 0, %_Z4fillIPssEvT_S1_T0_.exit ], [ %index.next177.4, %vector.body168 ]
  %next.gep179 = getelementptr [8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 %index171
  %23 = bitcast i16* %next.gep179 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %23, align 16, !tbaa !14
  %24 = getelementptr i16, i16* %next.gep179, i64 8
  %25 = bitcast i16* %24 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %25, align 16, !tbaa !14
  %index.next177 = add nuw nsw i64 %index171, 16
  %next.gep179.1 = getelementptr [8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 %index.next177
  %26 = bitcast i16* %next.gep179.1 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %26, align 16, !tbaa !14
  %27 = getelementptr i16, i16* %next.gep179.1, i64 8
  %28 = bitcast i16* %27 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %28, align 16, !tbaa !14
  %index.next177.1 = add nuw nsw i64 %index.next177, 16
  %next.gep179.2 = getelementptr [8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 %index.next177.1
  %29 = bitcast i16* %next.gep179.2 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %29, align 16, !tbaa !14
  %30 = getelementptr i16, i16* %next.gep179.2, i64 8
  %31 = bitcast i16* %30 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %31, align 16, !tbaa !14
  %index.next177.2 = add nuw nsw i64 %index.next177.1, 16
  %next.gep179.3 = getelementptr [8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 %index.next177.2
  %32 = bitcast i16* %next.gep179.3 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %32, align 16, !tbaa !14
  %33 = getelementptr i16, i16* %next.gep179.3, i64 8
  %34 = bitcast i16* %33 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %34, align 16, !tbaa !14
  %index.next177.3 = add nuw nsw i64 %index.next177.2, 16
  %next.gep179.4 = getelementptr [8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 %index.next177.3
  %35 = bitcast i16* %next.gep179.4 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %35, align 16, !tbaa !14
  %36 = getelementptr i16, i16* %next.gep179.4, i64 8
  %37 = bitcast i16* %36 to <8 x i16>*
  store <8 x i16> %broadcast.splat212, <8 x i16>* %37, align 16, !tbaa !14
  %index.next177.4 = add nuw nsw i64 %index.next177.3, 16
  %38 = icmp eq i64 %index.next177.4, 8000
  br i1 %38, label %_Z4fillIPttEvT_S1_T0_.exit, label %vector.body168, !llvm.loop !19

_Z4fillIPttEvT_S1_T0_.exit:                       ; preds = %vector.body168
  %conv50 = fptoui double %temp.0.reg2mem.0 to i16
  %mul52 = shl i16 %conv50, 1
  %add55 = add i16 %conv50, 2
  %div102 = udiv i16 %mul52, %add55
  %add61 = add i16 %div102, %conv50
  tail call void @_Z14test_variable1It19custom_add_variableItEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str65, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1It19custom_add_variableItEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str66, i64 0, i64 0))
  tail call void @_Z14test_variable4It28custom_add_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str67, i64 0, i64 0))
  tail call void @_Z14test_variable1It19custom_sub_variableItEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str68, i64 0, i64 0))
  tail call void @_Z14test_variable4It28custom_sub_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str69, i64 0, i64 0))
  tail call void @_Z14test_variable1It24custom_multiply_variableItEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str70, i64 0, i64 0))
  tail call void @_Z14test_variable4It33custom_multiply_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str71, i64 0, i64 0))
  tail call void @_Z14test_variable4It34custom_multiply_multiple_variable2ItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str72, i64 0, i64 0))
  tail call void @_Z14test_variable1It22custom_divide_variableItEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str73, i64 0, i64 0))
  tail call void @_Z14test_variable4It31custom_divide_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str74, i64 0, i64 0))
  tail call void @_Z14test_variable4It32custom_divide_multiple_variable2ItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str75, i64 0, i64 0))
  tail call void @_Z14test_variable4It30custom_mixed_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str76, i64 0, i64 0))
  tail call void @_Z14test_variable1It19custom_variable_andItEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str77, i64 0, i64 0))
  tail call void @_Z14test_variable4It28custom_multiple_variable_andItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str78, i64 0, i64 0))
  tail call void @_Z14test_variable1It18custom_variable_orItEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str79, i64 0, i64 0))
  tail call void @_Z14test_variable4It27custom_multiple_variable_orItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str80, i64 0, i64 0))
  tail call void @_Z14test_variable1It19custom_variable_xorItEEvPT_iS2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str81, i64 0, i64 0))
  tail call void @_Z14test_variable4It28custom_multiple_variable_xorItEEvPT_iS2_S2_S2_S2_PKc(i16* getelementptr inbounds ([8000 x i16], [8000 x i16]* @data16unsigned, i64 0, i64 0), i32 8000, i16 zeroext %conv50, i16 zeroext %mul52, i16 zeroext %add55, i16 zeroext %add61, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str82, i64 0, i64 0))
  %39 = load double, double* @init_value, align 8, !tbaa !13
  %conv63 = fptosi double %39 to i32
  %broadcast.splatinsert243 = insertelement <4 x i32> undef, i32 %conv63, i32 0
  %broadcast.splat244 = shufflevector <4 x i32> %broadcast.splatinsert243, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %vector.body216

vector.body216:                                   ; preds = %vector.body216, %_Z4fillIPttEvT_S1_T0_.exit
  %index219 = phi i64 [ 0, %_Z4fillIPttEvT_S1_T0_.exit ], [ %index.next225.4, %vector.body216 ]
  %next.gep227 = getelementptr [8000 x i32], [8000 x i32]* @data32, i64 0, i64 %index219
  %40 = bitcast i32* %next.gep227 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %40, align 16, !tbaa !5
  %41 = getelementptr i32, i32* %next.gep227, i64 4
  %42 = bitcast i32* %41 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %42, align 16, !tbaa !5
  %index.next225 = add nuw nsw i64 %index219, 8
  %next.gep227.1 = getelementptr [8000 x i32], [8000 x i32]* @data32, i64 0, i64 %index.next225
  %43 = bitcast i32* %next.gep227.1 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %43, align 16, !tbaa !5
  %44 = getelementptr i32, i32* %next.gep227.1, i64 4
  %45 = bitcast i32* %44 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %45, align 16, !tbaa !5
  %index.next225.1 = add nuw nsw i64 %index.next225, 8
  %next.gep227.2 = getelementptr [8000 x i32], [8000 x i32]* @data32, i64 0, i64 %index.next225.1
  %46 = bitcast i32* %next.gep227.2 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %46, align 16, !tbaa !5
  %47 = getelementptr i32, i32* %next.gep227.2, i64 4
  %48 = bitcast i32* %47 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %48, align 16, !tbaa !5
  %index.next225.2 = add nuw nsw i64 %index.next225.1, 8
  %next.gep227.3 = getelementptr [8000 x i32], [8000 x i32]* @data32, i64 0, i64 %index.next225.2
  %49 = bitcast i32* %next.gep227.3 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %49, align 16, !tbaa !5
  %50 = getelementptr i32, i32* %next.gep227.3, i64 4
  %51 = bitcast i32* %50 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %51, align 16, !tbaa !5
  %index.next225.3 = add nuw nsw i64 %index.next225.2, 8
  %next.gep227.4 = getelementptr [8000 x i32], [8000 x i32]* @data32, i64 0, i64 %index.next225.3
  %52 = bitcast i32* %next.gep227.4 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %52, align 16, !tbaa !5
  %53 = getelementptr i32, i32* %next.gep227.4, i64 4
  %54 = bitcast i32* %53 to <4 x i32>*
  store <4 x i32> %broadcast.splat244, <4 x i32>* %54, align 16, !tbaa !5
  %index.next225.4 = add nuw nsw i64 %index.next225.3, 8
  %55 = icmp eq i64 %index.next225.4, 8000
  br i1 %55, label %_Z4fillIPiiEvT_S1_T0_.exit, label %vector.body216, !llvm.loop !20

_Z4fillIPiiEvT_S1_T0_.exit:                       ; preds = %vector.body216
  %conv64 = fptosi double %temp.0.reg2mem.0 to i32
  %mul65 = shl nsw i32 %conv64, 1
  %add66 = add nsw i32 %conv64, 2
  %div67 = sdiv i32 %mul65, %add66
  %add68 = add nsw i32 %div67, %conv64
  tail call void @_Z14test_variable1Ii19custom_add_variableIiEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str83, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1Ii19custom_add_variableIiEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str84, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii28custom_add_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str85, i64 0, i64 0))
  tail call void @_Z14test_variable1Ii19custom_sub_variableIiEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str86, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii28custom_sub_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str87, i64 0, i64 0))
  tail call void @_Z14test_variable1Ii24custom_multiply_variableIiEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str88, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii33custom_multiply_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str89, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii34custom_multiply_multiple_variable2IiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str90, i64 0, i64 0))
  tail call void @_Z14test_variable1Ii22custom_divide_variableIiEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str91, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii31custom_divide_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str92, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii32custom_divide_multiple_variable2IiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str93, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii30custom_mixed_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str94, i64 0, i64 0))
  tail call void @_Z14test_variable1Ii19custom_variable_andIiEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str95, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii28custom_multiple_variable_andIiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str96, i64 0, i64 0))
  tail call void @_Z14test_variable1Ii18custom_variable_orIiEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str97, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii27custom_multiple_variable_orIiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str98, i64 0, i64 0))
  tail call void @_Z14test_variable1Ii19custom_variable_xorIiEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str99, i64 0, i64 0))
  tail call void @_Z14test_variable4Ii28custom_multiple_variable_xorIiEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32, i64 0, i64 0), i32 8000, i32 %conv64, i32 %mul65, i32 %add66, i32 %add68, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str100, i64 0, i64 0))
  %56 = load double, double* @init_value, align 8, !tbaa !13
  %conv69 = fptoui double %56 to i32
  %broadcast.splatinsert275 = insertelement <4 x i32> undef, i32 %conv69, i32 0
  %broadcast.splat276 = shufflevector <4 x i32> %broadcast.splatinsert275, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %vector.body248

vector.body248:                                   ; preds = %vector.body248, %_Z4fillIPiiEvT_S1_T0_.exit
  %index251 = phi i64 [ 0, %_Z4fillIPiiEvT_S1_T0_.exit ], [ %index.next257.4, %vector.body248 ]
  %next.gep259 = getelementptr [8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 %index251
  %57 = bitcast i32* %next.gep259 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %57, align 16, !tbaa !5
  %58 = getelementptr i32, i32* %next.gep259, i64 4
  %59 = bitcast i32* %58 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %59, align 16, !tbaa !5
  %index.next257 = add nuw nsw i64 %index251, 8
  %next.gep259.1 = getelementptr [8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 %index.next257
  %60 = bitcast i32* %next.gep259.1 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %60, align 16, !tbaa !5
  %61 = getelementptr i32, i32* %next.gep259.1, i64 4
  %62 = bitcast i32* %61 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %62, align 16, !tbaa !5
  %index.next257.1 = add nuw nsw i64 %index.next257, 8
  %next.gep259.2 = getelementptr [8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 %index.next257.1
  %63 = bitcast i32* %next.gep259.2 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %63, align 16, !tbaa !5
  %64 = getelementptr i32, i32* %next.gep259.2, i64 4
  %65 = bitcast i32* %64 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %65, align 16, !tbaa !5
  %index.next257.2 = add nuw nsw i64 %index.next257.1, 8
  %next.gep259.3 = getelementptr [8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 %index.next257.2
  %66 = bitcast i32* %next.gep259.3 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %66, align 16, !tbaa !5
  %67 = getelementptr i32, i32* %next.gep259.3, i64 4
  %68 = bitcast i32* %67 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %68, align 16, !tbaa !5
  %index.next257.3 = add nuw nsw i64 %index.next257.2, 8
  %next.gep259.4 = getelementptr [8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 %index.next257.3
  %69 = bitcast i32* %next.gep259.4 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %69, align 16, !tbaa !5
  %70 = getelementptr i32, i32* %next.gep259.4, i64 4
  %71 = bitcast i32* %70 to <4 x i32>*
  store <4 x i32> %broadcast.splat276, <4 x i32>* %71, align 16, !tbaa !5
  %index.next257.4 = add nuw nsw i64 %index.next257.3, 8
  %72 = icmp eq i64 %index.next257.4, 8000
  br i1 %72, label %_Z4fillIPjjEvT_S1_T0_.exit, label %vector.body248, !llvm.loop !21

_Z4fillIPjjEvT_S1_T0_.exit:                       ; preds = %vector.body248
  %conv70 = fptoui double %temp.0.reg2mem.0 to i32
  %mul71 = shl i32 %conv70, 1
  %add72 = add i32 %conv70, 2
  %div73 = udiv i32 %mul71, %add72
  %add74 = add i32 %div73, %conv70
  tail call void @_Z14test_variable1Ij19custom_add_variableIjEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str101, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1Ij19custom_add_variableIjEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str102, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij28custom_add_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str103, i64 0, i64 0))
  tail call void @_Z14test_variable1Ij19custom_sub_variableIjEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str104, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij28custom_sub_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str105, i64 0, i64 0))
  tail call void @_Z14test_variable1Ij24custom_multiply_variableIjEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str106, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij33custom_multiply_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str107, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij34custom_multiply_multiple_variable2IjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str108, i64 0, i64 0))
  tail call void @_Z14test_variable1Ij22custom_divide_variableIjEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str109, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij31custom_divide_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str110, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij32custom_divide_multiple_variable2IjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str111, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij30custom_mixed_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str112, i64 0, i64 0))
  tail call void @_Z14test_variable1Ij19custom_variable_andIjEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str113, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij28custom_multiple_variable_andIjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str114, i64 0, i64 0))
  tail call void @_Z14test_variable1Ij18custom_variable_orIjEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str115, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij27custom_multiple_variable_orIjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str116, i64 0, i64 0))
  tail call void @_Z14test_variable1Ij19custom_variable_xorIjEEvPT_iS2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str117, i64 0, i64 0))
  tail call void @_Z14test_variable4Ij28custom_multiple_variable_xorIjEEvPT_iS2_S2_S2_S2_PKc(i32* getelementptr inbounds ([8000 x i32], [8000 x i32]* @data32unsigned, i64 0, i64 0), i32 8000, i32 %conv70, i32 %mul71, i32 %add72, i32 %add74, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str118, i64 0, i64 0))
  %73 = load double, double* @init_value, align 8, !tbaa !13
  %conv75 = fptosi double %73 to i64
  %broadcast.splatinsert299 = insertelement <2 x i64> undef, i64 %conv75, i32 0
  %broadcast.splat300 = shufflevector <2 x i64> %broadcast.splatinsert299, <2 x i64> undef, <2 x i32> zeroinitializer
  br label %vector.body280

vector.body280:                                   ; preds = %vector.body280, %_Z4fillIPjjEvT_S1_T0_.exit
  %index283 = phi i64 [ 0, %_Z4fillIPjjEvT_S1_T0_.exit ], [ %index.next289.4, %vector.body280 ]
  %next.gep291 = getelementptr [8000 x i64], [8000 x i64]* @data64, i64 0, i64 %index283
  %74 = bitcast i64* %next.gep291 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %74, align 16, !tbaa !11
  %75 = getelementptr i64, i64* %next.gep291, i64 2
  %76 = bitcast i64* %75 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %76, align 16, !tbaa !11
  %index.next289 = add nuw nsw i64 %index283, 4
  %next.gep291.1 = getelementptr [8000 x i64], [8000 x i64]* @data64, i64 0, i64 %index.next289
  %77 = bitcast i64* %next.gep291.1 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %77, align 16, !tbaa !11
  %78 = getelementptr i64, i64* %next.gep291.1, i64 2
  %79 = bitcast i64* %78 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %79, align 16, !tbaa !11
  %index.next289.1 = add nuw nsw i64 %index.next289, 4
  %next.gep291.2 = getelementptr [8000 x i64], [8000 x i64]* @data64, i64 0, i64 %index.next289.1
  %80 = bitcast i64* %next.gep291.2 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %80, align 16, !tbaa !11
  %81 = getelementptr i64, i64* %next.gep291.2, i64 2
  %82 = bitcast i64* %81 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %82, align 16, !tbaa !11
  %index.next289.2 = add nuw nsw i64 %index.next289.1, 4
  %next.gep291.3 = getelementptr [8000 x i64], [8000 x i64]* @data64, i64 0, i64 %index.next289.2
  %83 = bitcast i64* %next.gep291.3 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %83, align 16, !tbaa !11
  %84 = getelementptr i64, i64* %next.gep291.3, i64 2
  %85 = bitcast i64* %84 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %85, align 16, !tbaa !11
  %index.next289.3 = add nuw nsw i64 %index.next289.2, 4
  %next.gep291.4 = getelementptr [8000 x i64], [8000 x i64]* @data64, i64 0, i64 %index.next289.3
  %86 = bitcast i64* %next.gep291.4 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %86, align 16, !tbaa !11
  %87 = getelementptr i64, i64* %next.gep291.4, i64 2
  %88 = bitcast i64* %87 to <2 x i64>*
  store <2 x i64> %broadcast.splat300, <2 x i64>* %88, align 16, !tbaa !11
  %index.next289.4 = add nuw nsw i64 %index.next289.3, 4
  %89 = icmp eq i64 %index.next289.4, 8000
  br i1 %89, label %_Z4fillIPllEvT_S1_T0_.exit, label %vector.body280, !llvm.loop !22

_Z4fillIPllEvT_S1_T0_.exit:                       ; preds = %vector.body280
  %conv76 = fptosi double %temp.0.reg2mem.0 to i64
  %mul77 = shl nsw i64 %conv76, 1
  %add78 = add nsw i64 %conv76, 2
  %div79 = sdiv i64 %mul77, %add78
  %add80 = add nsw i64 %div79, %conv76
  tail call void @_Z14test_variable1Il19custom_add_variableIlEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str119, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1Il19custom_add_variableIlEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str120, i64 0, i64 0))
  tail call void @_Z14test_variable4Il28custom_add_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str121, i64 0, i64 0))
  tail call void @_Z14test_variable1Il19custom_sub_variableIlEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str122, i64 0, i64 0))
  tail call void @_Z14test_variable4Il28custom_sub_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str123, i64 0, i64 0))
  tail call void @_Z14test_variable1Il24custom_multiply_variableIlEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str124, i64 0, i64 0))
  tail call void @_Z14test_variable4Il33custom_multiply_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str125, i64 0, i64 0))
  tail call void @_Z14test_variable4Il34custom_multiply_multiple_variable2IlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str126, i64 0, i64 0))
  tail call void @_Z14test_variable1Il22custom_divide_variableIlEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str127, i64 0, i64 0))
  tail call void @_Z14test_variable4Il31custom_divide_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str128, i64 0, i64 0))
  tail call void @_Z14test_variable4Il32custom_divide_multiple_variable2IlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str129, i64 0, i64 0))
  tail call void @_Z14test_variable4Il30custom_mixed_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str130, i64 0, i64 0))
  tail call void @_Z14test_variable1Il19custom_variable_andIlEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str131, i64 0, i64 0))
  tail call void @_Z14test_variable4Il28custom_multiple_variable_andIlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str132, i64 0, i64 0))
  tail call void @_Z14test_variable1Il18custom_variable_orIlEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str133, i64 0, i64 0))
  tail call void @_Z14test_variable4Il27custom_multiple_variable_orIlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str134, i64 0, i64 0))
  tail call void @_Z14test_variable1Il19custom_variable_xorIlEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str135, i64 0, i64 0))
  tail call void @_Z14test_variable4Il28custom_multiple_variable_xorIlEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64, i64 0, i64 0), i32 8000, i64 %conv76, i64 %mul77, i64 %add78, i64 %add80, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str136, i64 0, i64 0))
  %90 = load double, double* @init_value, align 8, !tbaa !13
  %conv81 = fptoui double %90 to i64
  %broadcast.splatinsert323 = insertelement <2 x i64> undef, i64 %conv81, i32 0
  %broadcast.splat324 = shufflevector <2 x i64> %broadcast.splatinsert323, <2 x i64> undef, <2 x i32> zeroinitializer
  br label %vector.body304

vector.body304:                                   ; preds = %vector.body304, %_Z4fillIPllEvT_S1_T0_.exit
  %index307 = phi i64 [ 0, %_Z4fillIPllEvT_S1_T0_.exit ], [ %index.next313.4, %vector.body304 ]
  %next.gep315 = getelementptr [8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 %index307
  %91 = bitcast i64* %next.gep315 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %91, align 16, !tbaa !11
  %92 = getelementptr i64, i64* %next.gep315, i64 2
  %93 = bitcast i64* %92 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %93, align 16, !tbaa !11
  %index.next313 = add nuw nsw i64 %index307, 4
  %next.gep315.1 = getelementptr [8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 %index.next313
  %94 = bitcast i64* %next.gep315.1 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %94, align 16, !tbaa !11
  %95 = getelementptr i64, i64* %next.gep315.1, i64 2
  %96 = bitcast i64* %95 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %96, align 16, !tbaa !11
  %index.next313.1 = add nuw nsw i64 %index.next313, 4
  %next.gep315.2 = getelementptr [8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 %index.next313.1
  %97 = bitcast i64* %next.gep315.2 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %97, align 16, !tbaa !11
  %98 = getelementptr i64, i64* %next.gep315.2, i64 2
  %99 = bitcast i64* %98 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %99, align 16, !tbaa !11
  %index.next313.2 = add nuw nsw i64 %index.next313.1, 4
  %next.gep315.3 = getelementptr [8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 %index.next313.2
  %100 = bitcast i64* %next.gep315.3 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %100, align 16, !tbaa !11
  %101 = getelementptr i64, i64* %next.gep315.3, i64 2
  %102 = bitcast i64* %101 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %102, align 16, !tbaa !11
  %index.next313.3 = add nuw nsw i64 %index.next313.2, 4
  %next.gep315.4 = getelementptr [8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 %index.next313.3
  %103 = bitcast i64* %next.gep315.4 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %103, align 16, !tbaa !11
  %104 = getelementptr i64, i64* %next.gep315.4, i64 2
  %105 = bitcast i64* %104 to <2 x i64>*
  store <2 x i64> %broadcast.splat324, <2 x i64>* %105, align 16, !tbaa !11
  %index.next313.4 = add nuw nsw i64 %index.next313.3, 4
  %106 = icmp eq i64 %index.next313.4, 8000
  br i1 %106, label %_Z4fillIPmmEvT_S1_T0_.exit, label %vector.body304, !llvm.loop !23

_Z4fillIPmmEvT_S1_T0_.exit:                       ; preds = %vector.body304
  %conv82 = fptoui double %temp.0.reg2mem.0 to i64
  %mul83 = shl i64 %conv82, 1
  %add84 = add i64 %conv82, 2
  %div85 = udiv i64 %mul83, %add84
  %add86 = add i64 %div85, %conv82
  tail call void @_Z14test_variable1Im19custom_add_variableImEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str137, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1Im19custom_add_variableImEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str138, i64 0, i64 0))
  tail call void @_Z14test_variable4Im28custom_add_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str139, i64 0, i64 0))
  tail call void @_Z14test_variable1Im19custom_sub_variableImEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str140, i64 0, i64 0))
  tail call void @_Z14test_variable4Im28custom_sub_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str141, i64 0, i64 0))
  tail call void @_Z14test_variable1Im24custom_multiply_variableImEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str142, i64 0, i64 0))
  tail call void @_Z14test_variable4Im33custom_multiply_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str143, i64 0, i64 0))
  tail call void @_Z14test_variable4Im34custom_multiply_multiple_variable2ImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str144, i64 0, i64 0))
  tail call void @_Z14test_variable1Im22custom_divide_variableImEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str145, i64 0, i64 0))
  tail call void @_Z14test_variable4Im31custom_divide_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str146, i64 0, i64 0))
  tail call void @_Z14test_variable4Im32custom_divide_multiple_variable2ImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str147, i64 0, i64 0))
  tail call void @_Z14test_variable4Im30custom_mixed_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str148, i64 0, i64 0))
  tail call void @_Z14test_variable1Im19custom_variable_andImEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str149, i64 0, i64 0))
  tail call void @_Z14test_variable4Im28custom_multiple_variable_andImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str150, i64 0, i64 0))
  tail call void @_Z14test_variable1Im18custom_variable_orImEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str151, i64 0, i64 0))
  tail call void @_Z14test_variable4Im27custom_multiple_variable_orImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str152, i64 0, i64 0))
  tail call void @_Z14test_variable1Im19custom_variable_xorImEEvPT_iS2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str153, i64 0, i64 0))
  tail call void @_Z14test_variable4Im28custom_multiple_variable_xorImEEvPT_iS2_S2_S2_S2_PKc(i64* getelementptr inbounds ([8000 x i64], [8000 x i64]* @data64unsigned, i64 0, i64 0), i32 8000, i64 %conv82, i64 %mul83, i64 %add84, i64 %add86, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str154, i64 0, i64 0))
  %107 = load double, double* @init_value, align 8, !tbaa !13
  %conv87 = fptrunc double %107 to float
  %broadcast.splatinsert355 = insertelement <4 x float> undef, float %conv87, i32 0
  %broadcast.splat356 = shufflevector <4 x float> %broadcast.splatinsert355, <4 x float> undef, <4 x i32> zeroinitializer
  br label %vector.body328

vector.body328:                                   ; preds = %vector.body328, %_Z4fillIPmmEvT_S1_T0_.exit
  %index331 = phi i64 [ 0, %_Z4fillIPmmEvT_S1_T0_.exit ], [ %index.next337.4, %vector.body328 ]
  %next.gep339 = getelementptr [8000 x float], [8000 x float]* @dataFloat, i64 0, i64 %index331
  %108 = bitcast float* %next.gep339 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %108, align 16, !tbaa !24
  %109 = getelementptr float, float* %next.gep339, i64 4
  %110 = bitcast float* %109 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %110, align 16, !tbaa !24
  %index.next337 = add nuw nsw i64 %index331, 8
  %next.gep339.1 = getelementptr [8000 x float], [8000 x float]* @dataFloat, i64 0, i64 %index.next337
  %111 = bitcast float* %next.gep339.1 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %111, align 16, !tbaa !24
  %112 = getelementptr float, float* %next.gep339.1, i64 4
  %113 = bitcast float* %112 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %113, align 16, !tbaa !24
  %index.next337.1 = add nuw nsw i64 %index.next337, 8
  %next.gep339.2 = getelementptr [8000 x float], [8000 x float]* @dataFloat, i64 0, i64 %index.next337.1
  %114 = bitcast float* %next.gep339.2 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %114, align 16, !tbaa !24
  %115 = getelementptr float, float* %next.gep339.2, i64 4
  %116 = bitcast float* %115 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %116, align 16, !tbaa !24
  %index.next337.2 = add nuw nsw i64 %index.next337.1, 8
  %next.gep339.3 = getelementptr [8000 x float], [8000 x float]* @dataFloat, i64 0, i64 %index.next337.2
  %117 = bitcast float* %next.gep339.3 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %117, align 16, !tbaa !24
  %118 = getelementptr float, float* %next.gep339.3, i64 4
  %119 = bitcast float* %118 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %119, align 16, !tbaa !24
  %index.next337.3 = add nuw nsw i64 %index.next337.2, 8
  %next.gep339.4 = getelementptr [8000 x float], [8000 x float]* @dataFloat, i64 0, i64 %index.next337.3
  %120 = bitcast float* %next.gep339.4 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %120, align 16, !tbaa !24
  %121 = getelementptr float, float* %next.gep339.4, i64 4
  %122 = bitcast float* %121 to <4 x float>*
  store <4 x float> %broadcast.splat356, <4 x float>* %122, align 16, !tbaa !24
  %index.next337.4 = add nuw nsw i64 %index.next337.3, 8
  %123 = icmp eq i64 %index.next337.4, 8000
  br i1 %123, label %_Z4fillIPffEvT_S1_T0_.exit, label %vector.body328, !llvm.loop !26

_Z4fillIPffEvT_S1_T0_.exit:                       ; preds = %vector.body328
  %conv88 = fptrunc double %temp.0.reg2mem.0 to float
  %mul89 = fmul float %conv88, 2.000000e+00
  %add90 = fadd float %conv88, 2.000000e+00
  %div91 = fdiv float %mul89, %add90
  %add92 = fadd float %conv88, %div91
  tail call void @_Z14test_variable1If19custom_add_variableIfEEvPT_iS2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str155, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1If19custom_add_variableIfEEvPT_iS2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str156, i64 0, i64 0))
  tail call void @_Z14test_variable4If28custom_add_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, float %mul89, float %add90, float %add92, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str157, i64 0, i64 0))
  tail call void @_Z14test_variable1If19custom_sub_variableIfEEvPT_iS2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str158, i64 0, i64 0))
  tail call void @_Z14test_variable4If28custom_sub_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, float %mul89, float %add90, float %add92, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str159, i64 0, i64 0))
  tail call void @_Z14test_variable1If24custom_multiply_variableIfEEvPT_iS2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str160, i64 0, i64 0))
  tail call void @_Z14test_variable4If33custom_multiply_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, float %mul89, float %add90, float %add92, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str161, i64 0, i64 0))
  tail call void @_Z14test_variable4If34custom_multiply_multiple_variable2IfEEvPT_iS2_S2_S2_S2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, float %mul89, float %add90, float %add92, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str162, i64 0, i64 0))
  tail call void @_Z14test_variable1If22custom_divide_variableIfEEvPT_iS2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str163, i64 0, i64 0))
  tail call void @_Z14test_variable4If31custom_divide_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, float %mul89, float %add90, float %add92, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str164, i64 0, i64 0))
  tail call void @_Z14test_variable4If32custom_divide_multiple_variable2IfEEvPT_iS2_S2_S2_S2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, float %mul89, float %add90, float %add92, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str165, i64 0, i64 0))
  tail call void @_Z14test_variable4If30custom_mixed_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* getelementptr inbounds ([8000 x float], [8000 x float]* @dataFloat, i64 0, i64 0), i32 8000, float %conv88, float %mul89, float %add90, float %add92, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str166, i64 0, i64 0))
  %124 = load i64, i64* bitcast (double* @init_value to i64*), align 8, !tbaa !13
  br label %vector.body360

vector.body360:                                   ; preds = %vector.body360, %_Z4fillIPffEvT_S1_T0_.exit
  %index363 = phi i64 [ 0, %_Z4fillIPffEvT_S1_T0_.exit ], [ %index.next369.3, %vector.body360 ]
  %next.gep371 = getelementptr [8000 x double], [8000 x double]* @dataDouble, i64 0, i64 %index363
  %125 = or i64 %index363, 1
  %next.gep372 = getelementptr [8000 x double], [8000 x double]* @dataDouble, i64 0, i64 %125
  %126 = bitcast double* %next.gep371 to i64*
  %127 = bitcast double* %next.gep372 to i64*
  store i64 %124, i64* %126, align 16, !tbaa !13
  store i64 %124, i64* %127, align 8, !tbaa !13
  %index.next369 = add nuw nsw i64 %index363, 2
  %next.gep371.1 = getelementptr [8000 x double], [8000 x double]* @dataDouble, i64 0, i64 %index.next369
  %128 = or i64 %index.next369, 1
  %next.gep372.1 = getelementptr [8000 x double], [8000 x double]* @dataDouble, i64 0, i64 %128
  %129 = bitcast double* %next.gep371.1 to i64*
  %130 = bitcast double* %next.gep372.1 to i64*
  store i64 %124, i64* %129, align 16, !tbaa !13
  store i64 %124, i64* %130, align 8, !tbaa !13
  %index.next369.1 = add nuw nsw i64 %index.next369, 2
  %next.gep371.2 = getelementptr [8000 x double], [8000 x double]* @dataDouble, i64 0, i64 %index.next369.1
  %131 = or i64 %index.next369.1, 1
  %next.gep372.2 = getelementptr [8000 x double], [8000 x double]* @dataDouble, i64 0, i64 %131
  %132 = bitcast double* %next.gep371.2 to i64*
  %133 = bitcast double* %next.gep372.2 to i64*
  store i64 %124, i64* %132, align 16, !tbaa !13
  store i64 %124, i64* %133, align 8, !tbaa !13
  %index.next369.2 = add nuw nsw i64 %index.next369.1, 2
  %next.gep371.3 = getelementptr [8000 x double], [8000 x double]* @dataDouble, i64 0, i64 %index.next369.2
  %134 = or i64 %index.next369.2, 1
  %next.gep372.3 = getelementptr [8000 x double], [8000 x double]* @dataDouble, i64 0, i64 %134
  %135 = bitcast double* %next.gep371.3 to i64*
  %136 = bitcast double* %next.gep372.3 to i64*
  store i64 %124, i64* %135, align 16, !tbaa !13
  store i64 %124, i64* %136, align 8, !tbaa !13
  %index.next369.3 = add nuw nsw i64 %index.next369.2, 2
  %137 = icmp eq i64 %index.next369.3, 8000
  br i1 %137, label %_Z4fillIPddEvT_S1_T0_.exit, label %vector.body360, !llvm.loop !27

_Z4fillIPddEvT_S1_T0_.exit:                       ; preds = %vector.body360
  %mul93 = fmul double %temp.0.reg2mem.0, 2.000000e+00
  %add94 = fadd double %temp.0.reg2mem.0, 2.000000e+00
  %div95 = fdiv double %mul93, %add94
  %add96 = fadd double %temp.0.reg2mem.0, %div95
  tail call void @_Z14test_variable1Id19custom_add_variableIdEEvPT_iS2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str167, i64 0, i64 0))
  tail call void @_Z22test_hoisted_variable1Id19custom_add_variableIdEEvPT_iS2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str168, i64 0, i64 0))
  tail call void @_Z14test_variable4Id28custom_add_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, double %mul93, double %add94, double %add96, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str169, i64 0, i64 0))
  tail call void @_Z14test_variable1Id19custom_sub_variableIdEEvPT_iS2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str170, i64 0, i64 0))
  tail call void @_Z14test_variable4Id28custom_sub_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, double %mul93, double %add94, double %add96, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str171, i64 0, i64 0))
  tail call void @_Z14test_variable1Id24custom_multiply_variableIdEEvPT_iS2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str172, i64 0, i64 0))
  tail call void @_Z14test_variable4Id33custom_multiply_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, double %mul93, double %add94, double %add96, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str173, i64 0, i64 0))
  tail call void @_Z14test_variable4Id34custom_multiply_multiple_variable2IdEEvPT_iS2_S2_S2_S2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, double %mul93, double %add94, double %add96, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str174, i64 0, i64 0))
  tail call void @_Z14test_variable1Id22custom_divide_variableIdEEvPT_iS2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str175, i64 0, i64 0))
  tail call void @_Z14test_variable4Id31custom_divide_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, double %mul93, double %add94, double %add96, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str176, i64 0, i64 0))
  tail call void @_Z14test_variable4Id32custom_divide_multiple_variable2IdEEvPT_iS2_S2_S2_S2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, double %mul93, double %add94, double %add96, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str177, i64 0, i64 0))
  tail call void @_Z14test_variable4Id30custom_mixed_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* getelementptr inbounds ([8000 x double], [8000 x double]* @dataDouble, i64 0, i64 0), i32 8000, double %temp.0.reg2mem.0, double %mul93, double %add94, double %add96, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str178, i64 0, i64 0))
  ret i32 0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ia19custom_add_variableIaEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  br i1 %cmp212, label %for.body3.preheader.us.preheader, label %for.end.preheader

for.end.preheader:                                ; preds = %for.cond1.preheader.preheader
  br label %for.end

for.body3.preheader.us.preheader:                 ; preds = %for.cond1.preheader.preheader
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert31 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat32 = shufflevector <16 x i8> %broadcast.splatinsert31, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %overflow.checked

for.body3.us:                                     ; preds = %for.body3.us.preheader, %for.body3.us
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3.us ], [ %resume.val, %for.body3.us.preheader ]
  %result.013.reg2mem.0.us = phi i8 [ %add.us, %for.body3.us ], [ %40, %for.body3.us.preheader ]
  %arrayidx.us = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %15 = load i8, i8* %arrayidx.us, align 1, !tbaa !28
  %add.i.us = add i8 %result.013.reg2mem.0.us, %v1
  %add.us = add i8 %add.i.us, %15
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.us.loopexit, label %for.body3.us, !llvm.loop !29

for.end.us.loopexit:                              ; preds = %for.body3.us
  %add.us.lcssa48 = phi i8 [ %add.us, %for.body3.us ]
  br label %for.end.us

for.end.us:                                       ; preds = %for.end.us.loopexit, %middle.block
  %add.us.lcssa = phi i8 [ %40, %middle.block ], [ %add.us.lcssa48, %for.end.us.loopexit ]
  %16 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i.us = fptosi double %16 to i8
  %add.i.i.us = add i8 %conv.i.us, %v1
  %mul.i.us = shl i8 %add.i.i.us, 6
  %sub.i.i.us = sub i8 %add.us.lcssa, %mul.i.us
  %conv3.i.i.us = sext i8 %sub.i.i.us to i32
  %ispos.i.i.us = icmp sgt i8 %sub.i.i.us, -1
  %neg.i.i.us = sub nsw i32 0, %conv3.i.i.us
  %17 = select i1 %ispos.i.i.us, i32 %conv3.i.i.us, i32 %neg.i.i.us
  %cmp.i.i.us = icmp slt i32 %17, 1
  br i1 %cmp.i.i.us, label %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us, label %if.then.i.us

if.then.i.us:                                     ; preds = %for.end.us
  %18 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i.us = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %18) #5
  %.pre25 = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us

_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us: ; preds = %if.then.i.us, %for.end.us
  %19 = phi i32 [ %.pre25, %if.then.i.us ], [ %20, %for.end.us ]
  %inc7.us = add nuw nsw i32 %i.016.us, 1
  %cmp.us = icmp slt i32 %inc7.us, %19
  br i1 %cmp.us, label %overflow.checked, label %for.end8.loopexit

overflow.checked:                                 ; preds = %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us, %for.body3.preheader.us.preheader
  %20 = phi i32 [ %19, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us ], [ %0, %for.body3.preheader.us.preheader ]
  %i.016.us = phi i32 [ %inc7.us, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us ], [ 0, %for.body3.preheader.us.preheader ]
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load30.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %21 = add <16 x i8> %broadcast.splat32, %wide.load.prol
  %22 = add <16 x i8> %broadcast.splat32, %wide.load30.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa44.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %22, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %21, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %21, %vector.body.prol ]
  %vec.phi29.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %22, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %37, %vector.body ]
  %vec.phi29 = phi <16 x i8> [ %vec.phi29.unr, %vector.ph.split.split ], [ %38, %vector.body ]
  %23 = getelementptr inbounds i8, i8* %first, i64 %index
  %24 = bitcast i8* %23 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %24, align 1, !tbaa !28
  %25 = getelementptr i8, i8* %23, i64 16
  %26 = bitcast i8* %25 to <16 x i8>*
  %wide.load30 = load <16 x i8>, <16 x i8>* %26, align 1, !tbaa !28
  %27 = add <16 x i8> %vec.phi, %broadcast.splat32
  %28 = add <16 x i8> %vec.phi29, %broadcast.splat32
  %29 = add <16 x i8> %27, %wide.load
  %30 = add <16 x i8> %28, %wide.load30
  %index.next = add i64 %index, 32
  %31 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %32 = bitcast i8* %31 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %32, align 1, !tbaa !28
  %33 = getelementptr i8, i8* %31, i64 16
  %34 = bitcast i8* %33 to <16 x i8>*
  %wide.load30.1 = load <16 x i8>, <16 x i8>* %34, align 1, !tbaa !28
  %35 = add <16 x i8> %29, %broadcast.splat32
  %36 = add <16 x i8> %30, %broadcast.splat32
  %37 = add <16 x i8> %35, %wide.load.1
  %38 = add <16 x i8> %36, %wide.load30.1
  %index.next.1 = add i64 %index.next, 32
  %39 = icmp eq i64 %index.next.1, %n.vec
  br i1 %39, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !31

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa47 = phi <16 x i8> [ %38, %vector.body ]
  %.lcssa46 = phi <16 x i8> [ %37, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa44 = phi <16 x i8> [ %.lcssa44.unr, %vector.ph.split ], [ %.lcssa47, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa46, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi35 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa44, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi35, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %rdx.shuf39 = shufflevector <16 x i8> %bin.rdx38, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx40 = add <16 x i8> %bin.rdx38, %rdx.shuf39
  %rdx.shuf41 = shufflevector <16 x i8> %bin.rdx40, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx42 = add <16 x i8> %bin.rdx40, %rdx.shuf41
  %40 = extractelement <16 x i8> %bin.rdx42, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end.us, label %for.body3.us.preheader

for.body3.us.preheader:                           ; preds = %middle.block
  br label %for.body3.us

for.end:                                          ; preds = %for.end.preheader, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit
  %41 = phi i32 [ %45, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit ], [ %0, %for.end.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit ], [ 0, %for.end.preheader ]
  %42 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %42 to i8
  %add.i.i = add i8 %conv.i, %v1
  %mul.i = shl i8 %add.i.i, 6
  %sub.i.i = sub i8 0, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %43 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %43, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit

_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %41, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %45
  br i1 %cmp, label %for.end, label %for.end8.loopexit43

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us
  br label %for.end8

for.end8.loopexit43:                              ; preds = %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit43, %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %46
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end8
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i19 = add nsw i32 %51, 10
  store i32 %add.i19, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i19 to i64
  %mul.i21 = shl nsw i64 %conv.i20, 4
  %call.i22 = tail call i8* @realloc(i8* %48, i64 %mul.i21) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %52 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1Ia19custom_add_variableIaEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp19 = icmp sgt i32 %0, 0
  br i1 %cmp19, label %for.cond1.preheader.preheader, label %for.end12

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp216 = icmp sgt i32 %count, 0
  %conv6 = sext i8 %v1 to i32
  %mul = mul nsw i32 %conv6, %count
  br i1 %cmp216, label %for.cond1.preheader.preheader.split.us, label %for.end.preheader

for.end.preheader:                                ; preds = %for.cond1.preheader.preheader
  %conv9 = trunc i32 %mul to i8
  br label %for.end

for.cond1.preheader.preheader.split.us:           ; preds = %for.cond1.preheader.preheader
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = sext i32 %count to i64
  %4 = lshr i64 %3, 5
  %5 = mul i64 %4, 32
  %6 = add i64 %5, -32
  %7 = lshr i64 %6, 5
  %8 = add i64 %7, 1
  %backedge.overflow = icmp eq i32 %count, 0
  %n.vec = and i64 %2, -32
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %8, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %9 = icmp ult i64 %7, 3
  br label %for.inc.lr.ph.us

for.inc.lr.ph.us:                                 ; preds = %for.cond1.preheader.preheader.split.us, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us
  %10 = phi i32 [ %46, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us ], [ %0, %for.cond1.preheader.preheader.split.us ]
  %i.020.us = phi i32 [ %inc11.us, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us ], [ 0, %for.cond1.preheader.preheader.split.us ]
  br i1 %backedge.overflow, label %polly.stmt.for.inc.us.preheader, label %overflow.checked

overflow.checked:                                 ; preds = %for.inc.lr.ph.us
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.preheader.split

vector.body.prol.preheader:                       ; preds = %vector.body.preheader
  br label %vector.body.prol

vector.body.prol:                                 ; preds = %vector.body.prol.preheader, %vector.body.prol
  %index.prol = phi i64 [ %index.next.prol, %vector.body.prol ], [ 0, %vector.body.prol.preheader ]
  %vec.phi.prol = phi <16 x i8> [ %15, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %vec.phi31.prol = phi <16 x i8> [ %16, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %vector.body.prol ], [ %xtraiter, %vector.body.prol.preheader ]
  %11 = getelementptr i8, i8* %first, i64 %index.prol
  %12 = bitcast i8* %11 to <16 x i8>*
  %wide.load.prol = load <16 x i8>, <16 x i8>* %12, align 1, !alias.scope !32, !noalias !34
  %13 = getelementptr i8, i8* %11, i64 16
  %14 = bitcast i8* %13 to <16 x i8>*
  %wide.load33.prol = load <16 x i8>, <16 x i8>* %14, align 1, !alias.scope !32, !noalias !34
  %15 = add <16 x i8> %wide.load.prol, %vec.phi.prol
  %16 = add <16 x i8> %wide.load33.prol, %vec.phi31.prol
  %index.next.prol = add i64 %index.prol, 32
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %vector.body.prol, label %vector.body.preheader.split.loopexit, !llvm.loop !39

vector.body.preheader.split.loopexit:             ; preds = %vector.body.prol
  %index.next.prol.lcssa = phi i64 [ %index.next.prol, %vector.body.prol ]
  %.lcssa51 = phi <16 x i8> [ %16, %vector.body.prol ]
  %.lcssa50 = phi <16 x i8> [ %15, %vector.body.prol ]
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.preheader.split.loopexit, %vector.body.preheader
  %.lcssa45.unr = phi <16 x i8> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa51, %vector.body.preheader.split.loopexit ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa50, %vector.body.preheader.split.loopexit ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ %index.next.prol.lcssa, %vector.body.preheader.split.loopexit ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa50, %vector.body.preheader.split.loopexit ]
  %vec.phi31.unr = phi <16 x i8> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa51, %vector.body.preheader.split.loopexit ]
  br i1 %9, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.3, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %39, %vector.body ]
  %vec.phi31 = phi <16 x i8> [ %vec.phi31.unr, %vector.body.preheader.split.split ], [ %40, %vector.body ]
  %17 = getelementptr i8, i8* %first, i64 %index
  %18 = bitcast i8* %17 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %18, align 1, !alias.scope !32, !noalias !34
  %19 = getelementptr i8, i8* %17, i64 16
  %20 = bitcast i8* %19 to <16 x i8>*
  %wide.load33 = load <16 x i8>, <16 x i8>* %20, align 1, !alias.scope !32, !noalias !34
  %21 = add <16 x i8> %wide.load, %vec.phi
  %22 = add <16 x i8> %wide.load33, %vec.phi31
  %index.next = add i64 %index, 32
  %23 = getelementptr i8, i8* %first, i64 %index.next
  %24 = bitcast i8* %23 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %24, align 1, !alias.scope !32, !noalias !34
  %25 = getelementptr i8, i8* %23, i64 16
  %26 = bitcast i8* %25 to <16 x i8>*
  %wide.load33.1 = load <16 x i8>, <16 x i8>* %26, align 1, !alias.scope !32, !noalias !34
  %27 = add <16 x i8> %wide.load.1, %21
  %28 = add <16 x i8> %wide.load33.1, %22
  %index.next.1 = add i64 %index.next, 32
  %29 = getelementptr i8, i8* %first, i64 %index.next.1
  %30 = bitcast i8* %29 to <16 x i8>*
  %wide.load.2 = load <16 x i8>, <16 x i8>* %30, align 1, !alias.scope !32, !noalias !34
  %31 = getelementptr i8, i8* %29, i64 16
  %32 = bitcast i8* %31 to <16 x i8>*
  %wide.load33.2 = load <16 x i8>, <16 x i8>* %32, align 1, !alias.scope !32, !noalias !34
  %33 = add <16 x i8> %wide.load.2, %27
  %34 = add <16 x i8> %wide.load33.2, %28
  %index.next.2 = add i64 %index.next.1, 32
  %35 = getelementptr i8, i8* %first, i64 %index.next.2
  %36 = bitcast i8* %35 to <16 x i8>*
  %wide.load.3 = load <16 x i8>, <16 x i8>* %36, align 1, !alias.scope !32, !noalias !34
  %37 = getelementptr i8, i8* %35, i64 16
  %38 = bitcast i8* %37 to <16 x i8>*
  %wide.load33.3 = load <16 x i8>, <16 x i8>* %38, align 1, !alias.scope !32, !noalias !34
  %39 = add <16 x i8> %wide.load.3, %33
  %40 = add <16 x i8> %wide.load33.3, %34
  %index.next.3 = add i64 %index.next.2, 32
  %41 = icmp eq i64 %index.next.3, %n.vec
  br i1 %41, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !41

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa48 = phi <16 x i8> [ %40, %vector.body ]
  %.lcssa47 = phi <16 x i8> [ %39, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa45 = phi <16 x i8> [ %.lcssa45.unr, %vector.body.preheader.split ], [ %.lcssa48, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa47, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi36 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa45, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi36, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf38 = shufflevector <16 x i8> %bin.rdx37, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx39 = add <16 x i8> %bin.rdx37, %rdx.shuf38
  %rdx.shuf40 = shufflevector <16 x i8> %bin.rdx39, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx41 = add <16 x i8> %bin.rdx39, %rdx.shuf40
  %rdx.shuf42 = shufflevector <16 x i8> %bin.rdx41, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx43 = add <16 x i8> %bin.rdx41, %rdx.shuf42
  %42 = extractelement <16 x i8> %bin.rdx43, i32 0
  %cmp.n = icmp eq i64 %2, %resume.val
  br i1 %cmp.n, label %for.end.us, label %polly.stmt.for.inc.us.preheader

polly.stmt.for.inc.us.preheader:                  ; preds = %middle.block, %for.inc.lr.ph.us
  %result.017.reg2mem.0.us.ph = phi i8 [ 0, %for.inc.lr.ph.us ], [ %42, %middle.block ]
  %polly.indvar.us.ph = phi i64 [ 0, %for.inc.lr.ph.us ], [ %resume.val, %middle.block ]
  br label %polly.stmt.for.inc.us

polly.stmt.for.inc.us:                            ; preds = %polly.stmt.for.inc.us.preheader, %polly.stmt.for.inc.us
  %result.017.reg2mem.0.us = phi i8 [ %p_add.us, %polly.stmt.for.inc.us ], [ %result.017.reg2mem.0.us.ph, %polly.stmt.for.inc.us.preheader ]
  %polly.indvar.us = phi i64 [ %polly.indvar_next.us, %polly.stmt.for.inc.us ], [ %polly.indvar.us.ph, %polly.stmt.for.inc.us.preheader ]
  %scevgep.us = getelementptr i8, i8* %first, i64 %polly.indvar.us
  %_p_scalar_.us = load i8, i8* %scevgep.us, align 1, !alias.scope !32, !noalias !34
  %p_add.us = add i8 %_p_scalar_.us, %result.017.reg2mem.0.us
  %polly.indvar_next.us = add nuw nsw i64 %polly.indvar.us, 1
  %exitcond = icmp eq i64 %polly.indvar_next.us, %1
  br i1 %exitcond, label %for.end.us.loopexit, label %polly.stmt.for.inc.us, !llvm.loop !42

for.end.us.loopexit:                              ; preds = %polly.stmt.for.inc.us
  %p_add.us.lcssa49 = phi i8 [ %p_add.us, %polly.stmt.for.inc.us ]
  br label %for.end.us

for.end.us:                                       ; preds = %for.end.us.loopexit, %middle.block
  %p_add.us.lcssa = phi i8 [ %42, %middle.block ], [ %p_add.us.lcssa49, %for.end.us.loopexit ]
  %conv713.us = zext i8 %p_add.us.lcssa to i32
  %add8.us = add i32 %conv713.us, %mul
  %conv9.us = trunc i32 %add8.us to i8
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i.us = fptosi double %43 to i8
  %add.i.i.us = add i8 %conv.i.us, %v1
  %mul.i.us = shl i8 %add.i.i.us, 6
  %sub.i.i.us = sub i8 %conv9.us, %mul.i.us
  %conv3.i.i.us = sext i8 %sub.i.i.us to i32
  %ispos.i.i.us = icmp sgt i8 %sub.i.i.us, -1
  %neg.i.i.us = sub nsw i32 0, %conv3.i.i.us
  %44 = select i1 %ispos.i.i.us, i32 %conv3.i.i.us, i32 %neg.i.i.us
  %cmp.i.i.us = icmp slt i32 %44, 1
  br i1 %cmp.i.i.us, label %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us, label %if.then.i.us

if.then.i.us:                                     ; preds = %for.end.us
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i.us = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %45) #5
  %.pre28 = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us

_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us: ; preds = %if.then.i.us, %for.end.us
  %46 = phi i32 [ %.pre28, %if.then.i.us ], [ %10, %for.end.us ]
  %inc11.us = add nuw nsw i32 %i.020.us, 1
  %cmp.us = icmp slt i32 %inc11.us, %46
  br i1 %cmp.us, label %for.inc.lr.ph.us, label %for.end12.loopexit

for.end:                                          ; preds = %for.end.preheader, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit
  %47 = phi i32 [ %51, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit ], [ %0, %for.end.preheader ]
  %i.020 = phi i32 [ %inc11, %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit ], [ 0, %for.end.preheader ]
  %48 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %48 to i8
  %add.i.i = add i8 %conv.i, %v1
  %mul.i = shl i8 %add.i.i, 6
  %sub.i.i = sub i8 %conv9, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %49 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %49, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %50 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %50) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit

_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %51 = phi i32 [ %47, %for.end ], [ %.pre, %if.then.i ]
  %inc11 = add nuw nsw i32 %i.020, 1
  %cmp = icmp slt i32 %inc11, %51
  br i1 %cmp, label %for.end, label %for.end12.loopexit44

for.end12.loopexit:                               ; preds = %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit.us
  br label %for.end12

for.end12.loopexit44:                             ; preds = %_Z26check_shifted_variable_sumIa19custom_add_variableIaEEvT_S2_.exit
  br label %for.end12

for.end12:                                        ; preds = %for.end12.loopexit44, %for.end12.loopexit, %entry
  %call.i21 = tail call i64 @clock() #5
  store i64 %call.i21, i64* @end_time, align 8, !tbaa !11
  %52 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i21, %52
  %conv.i22 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i22, 1.000000e+06
  %53 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %53, null
  %54 = bitcast %struct.one_result* %53 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end12
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i26

lor.lhs.false.i:                                  ; preds = %for.end12
  %55 = load i32, i32* @current_test, align 4, !tbaa !5
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %55, %56
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i26

if.then.i26:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %57 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %56, %lor.lhs.false.i ]
  %add.i = add nsw i32 %57, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i23 = sext i32 %add.i to i64
  %mul.i24 = shl nsw i64 %conv.i23, 4
  %call.i25 = tail call i8* @realloc(i8* %54, i64 %mul.i24) #5
  store i8* %call.i25, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i25, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i26
  %58 = bitcast i8* %call.i25 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i26
  %59 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i27 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %59) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %60 = phi %struct.one_result* [ %58, %if.then.if.end5_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %61 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %55, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %61 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %60, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %60, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %61, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia28custom_add_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %add.i.i = add i8 %v2, %v1
  %add3.i.i = add i8 %add.i.i, %v3
  %add5.i.i = add i8 %add3.i.i, %v4
  br i1 %cmp212, label %for.body3.preheader.us.preheader, label %for.end.preheader

for.end.preheader:                                ; preds = %for.cond1.preheader.preheader
  br label %for.end

for.body3.preheader.us.preheader:                 ; preds = %for.cond1.preheader.preheader
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert31 = insertelement <16 x i8> undef, i8 %add5.i.i, i32 0
  %broadcast.splat32 = shufflevector <16 x i8> %broadcast.splatinsert31, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %overflow.checked

for.body3.us:                                     ; preds = %for.body3.us.preheader, %for.body3.us
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3.us ], [ %resume.val, %for.body3.us.preheader ]
  %result.013.reg2mem.0.us = phi i8 [ %add.us, %for.body3.us ], [ %40, %for.body3.us.preheader ]
  %arrayidx.us = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %15 = load i8, i8* %arrayidx.us, align 1, !tbaa !28
  %add7.i.us = add i8 %add5.i.i, %result.013.reg2mem.0.us
  %add.us = add i8 %add7.i.us, %15
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.us.loopexit, label %for.body3.us, !llvm.loop !43

for.end.us.loopexit:                              ; preds = %for.body3.us
  %add.us.lcssa48 = phi i8 [ %add.us, %for.body3.us ]
  br label %for.end.us

for.end.us:                                       ; preds = %for.end.us.loopexit, %middle.block
  %add.us.lcssa = phi i8 [ %40, %middle.block ], [ %add.us.lcssa48, %for.end.us.loopexit ]
  %16 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i.us = fptosi double %16 to i8
  %add7.i.i.us = add i8 %add5.i.i, %conv.i.us
  %mul.i.us = shl i8 %add7.i.i.us, 6
  %sub.i.i.us = sub i8 %add.us.lcssa, %mul.i.us
  %conv3.i.i.us = sext i8 %sub.i.i.us to i32
  %ispos.i.i.us = icmp sgt i8 %sub.i.i.us, -1
  %neg.i.i.us = sub nsw i32 0, %conv3.i.i.us
  %17 = select i1 %ispos.i.i.us, i32 %conv3.i.i.us, i32 %neg.i.i.us
  %cmp.i.i.us = icmp slt i32 %17, 1
  br i1 %cmp.i.i.us, label %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit.us, label %if.then.i.us

if.then.i.us:                                     ; preds = %for.end.us
  %18 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i.us = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %18) #5
  %.pre25 = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit.us

_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit.us: ; preds = %if.then.i.us, %for.end.us
  %19 = phi i32 [ %.pre25, %if.then.i.us ], [ %20, %for.end.us ]
  %inc7.us = add nuw nsw i32 %i.016.us, 1
  %cmp.us = icmp slt i32 %inc7.us, %19
  br i1 %cmp.us, label %overflow.checked, label %for.end8.loopexit

overflow.checked:                                 ; preds = %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit.us, %for.body3.preheader.us.preheader
  %20 = phi i32 [ %19, %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit.us ], [ %0, %for.body3.preheader.us.preheader ]
  %i.016.us = phi i32 [ %inc7.us, %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit.us ], [ 0, %for.body3.preheader.us.preheader ]
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load30.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %21 = add <16 x i8> %broadcast.splat32, %wide.load.prol
  %22 = add <16 x i8> %broadcast.splat32, %wide.load30.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa44.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %22, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %21, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %21, %vector.body.prol ]
  %vec.phi29.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %22, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %37, %vector.body ]
  %vec.phi29 = phi <16 x i8> [ %vec.phi29.unr, %vector.ph.split.split ], [ %38, %vector.body ]
  %23 = getelementptr inbounds i8, i8* %first, i64 %index
  %24 = bitcast i8* %23 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %24, align 1, !tbaa !28
  %25 = getelementptr i8, i8* %23, i64 16
  %26 = bitcast i8* %25 to <16 x i8>*
  %wide.load30 = load <16 x i8>, <16 x i8>* %26, align 1, !tbaa !28
  %27 = add <16 x i8> %broadcast.splat32, %vec.phi
  %28 = add <16 x i8> %broadcast.splat32, %vec.phi29
  %29 = add <16 x i8> %27, %wide.load
  %30 = add <16 x i8> %28, %wide.load30
  %index.next = add i64 %index, 32
  %31 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %32 = bitcast i8* %31 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %32, align 1, !tbaa !28
  %33 = getelementptr i8, i8* %31, i64 16
  %34 = bitcast i8* %33 to <16 x i8>*
  %wide.load30.1 = load <16 x i8>, <16 x i8>* %34, align 1, !tbaa !28
  %35 = add <16 x i8> %broadcast.splat32, %29
  %36 = add <16 x i8> %broadcast.splat32, %30
  %37 = add <16 x i8> %35, %wide.load.1
  %38 = add <16 x i8> %36, %wide.load30.1
  %index.next.1 = add i64 %index.next, 32
  %39 = icmp eq i64 %index.next.1, %n.vec
  br i1 %39, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !44

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa47 = phi <16 x i8> [ %38, %vector.body ]
  %.lcssa46 = phi <16 x i8> [ %37, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa44 = phi <16 x i8> [ %.lcssa44.unr, %vector.ph.split ], [ %.lcssa47, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa46, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi35 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa44, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi35, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %rdx.shuf39 = shufflevector <16 x i8> %bin.rdx38, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx40 = add <16 x i8> %bin.rdx38, %rdx.shuf39
  %rdx.shuf41 = shufflevector <16 x i8> %bin.rdx40, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx42 = add <16 x i8> %bin.rdx40, %rdx.shuf41
  %40 = extractelement <16 x i8> %bin.rdx42, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end.us, label %for.body3.us.preheader

for.body3.us.preheader:                           ; preds = %middle.block
  br label %for.body3.us

for.end:                                          ; preds = %for.end.preheader, %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  %41 = phi i32 [ %45, %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.end.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.end.preheader ]
  %42 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %42 to i8
  %add7.i.i = add i8 %add5.i.i, %conv.i
  %mul.i = shl i8 %add7.i.i, 6
  %sub.i.i = sub i8 0, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %43 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %43, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %41, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %45
  br i1 %cmp, label %for.end, label %for.end8.loopexit43

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit.us
  br label %for.end8

for.end8.loopexit43:                              ; preds = %_Z26check_shifted_variable_sumIa28custom_add_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit43, %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %46
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end8
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i19 = add nsw i32 %51, 10
  store i32 %add.i19, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i19 to i64
  %mul.i21 = shl nsw i64 %conv.i20, 4
  %call.i22 = tail call i8* @realloc(i8* %48, i64 %mul.i21) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %52 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ia19custom_sub_variableIaEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat29 = shufflevector <16 x i8> %broadcast.splatinsert28, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa19custom_sub_variableIaEEvT_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa19custom_sub_variableIaEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa19custom_sub_variableIaEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load27.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = sub <16 x i8> %wide.load.prol, %broadcast.splat29
  %17 = sub <16 x i8> %wide.load27.prol, %broadcast.splat29
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa40.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi26.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi26 = phi <16 x i8> [ %vec.phi26.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load27 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = sub <16 x i8> %wide.load, %broadcast.splat29
  %23 = sub <16 x i8> %wide.load27, %broadcast.splat29
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi26
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load27.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = sub <16 x i8> %wide.load.1, %broadcast.splat29
  %31 = sub <16 x i8> %wide.load27.1, %broadcast.splat29
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !45

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa42 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa41 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa40 = phi <16 x i8> [ %.lcssa40.unr, %vector.ph.split ], [ %.lcssa42, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa40, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <16 x i8> %bin.rdx33, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <16 x i8> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <16 x i8> %bin.rdx35, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx35, %rdx.shuf36
  %rdx.shuf38 = shufflevector <16 x i8> %bin.rdx37, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx39 = add <16 x i8> %bin.rdx37, %rdx.shuf38
  %35 = extractelement <16 x i8> %bin.rdx39, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %sub.i = sub i8 %36, %v1
  %add = add i8 %sub.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !46

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %sub.i.i = sub i8 %conv.i, %v1
  %mul.i = shl i8 %sub.i.i, 6
  %sub.i5.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i
  %conv3.i.i = sext i8 %sub.i5.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i5.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa19custom_sub_variableIaEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa19custom_sub_variableIaEEvT_S2_.exit

_Z26check_shifted_variable_sumIa19custom_sub_variableIaEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa19custom_sub_variableIaEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i18 = sub nsw i64 %call.i17, %41
  %conv.i19 = sitofp i64 %sub.i18 to double
  %div.i = fdiv double %conv.i19, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i = add nsw i32 %46, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i to i64
  %mul.i21 = shl nsw i64 %conv.i20, 4
  %call.i22 = tail call i8* @realloc(i8* %43, i64 %mul.i21) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %47 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia28custom_sub_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %sum = add i8 %v2, %v1
  %sum25 = add i8 %sum, %v3
  %sum26 = add i8 %sum25, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert33 = insertelement <16 x i8> undef, i8 %sum26, i32 0
  %broadcast.splat34 = shufflevector <16 x i8> %broadcast.splatinsert33, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = sub <16 x i8> zeroinitializer, %broadcast.splat34
  %15 = sub <16 x i8> zeroinitializer, %broadcast.splat34
  %16 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa28custom_sub_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  %17 = phi i32 [ %42, %_Z26check_shifted_variable_sumIa28custom_sub_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa28custom_sub_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load32.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %18 = add <16 x i8> %14, %wide.load.prol
  %19 = add <16 x i8> %15, %wide.load32.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa45.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi31.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %16, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %34, %vector.body ]
  %vec.phi31 = phi <16 x i8> [ %vec.phi31.unr, %vector.ph.split.split ], [ %35, %vector.body ]
  %20 = getelementptr inbounds i8, i8* %first, i64 %index
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = getelementptr i8, i8* %20, i64 16
  %23 = bitcast i8* %22 to <16 x i8>*
  %wide.load32 = load <16 x i8>, <16 x i8>* %23, align 1, !tbaa !28
  %24 = sub <16 x i8> %vec.phi, %broadcast.splat34
  %25 = sub <16 x i8> %vec.phi31, %broadcast.splat34
  %26 = add <16 x i8> %24, %wide.load
  %27 = add <16 x i8> %25, %wide.load32
  %index.next = add i64 %index, 32
  %28 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = getelementptr i8, i8* %28, i64 16
  %31 = bitcast i8* %30 to <16 x i8>*
  %wide.load32.1 = load <16 x i8>, <16 x i8>* %31, align 1, !tbaa !28
  %32 = sub <16 x i8> %26, %broadcast.splat34
  %33 = sub <16 x i8> %27, %broadcast.splat34
  %34 = add <16 x i8> %32, %wide.load.1
  %35 = add <16 x i8> %33, %wide.load32.1
  %index.next.1 = add i64 %index.next, 32
  %36 = icmp eq i64 %index.next.1, %n.vec
  br i1 %36, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !47

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa47 = phi <16 x i8> [ %35, %vector.body ]
  %.lcssa46 = phi <16 x i8> [ %34, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa45 = phi <16 x i8> [ %.lcssa45.unr, %vector.ph.split ], [ %.lcssa47, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa46, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi37 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa45, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi37, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf39 = shufflevector <16 x i8> %bin.rdx38, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx40 = add <16 x i8> %bin.rdx38, %rdx.shuf39
  %rdx.shuf41 = shufflevector <16 x i8> %bin.rdx40, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx42 = add <16 x i8> %bin.rdx40, %rdx.shuf41
  %rdx.shuf43 = shufflevector <16 x i8> %bin.rdx42, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx44 = add <16 x i8> %bin.rdx42, %rdx.shuf43
  %37 = extractelement <16 x i8> %bin.rdx44, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %37, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %38 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %sub7.i = sub i8 %result.013.reg2mem.0, %sum26
  %add = add i8 %sub7.i, %38
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !48

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %37, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %39 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %39 to i8
  %sub7.i.i = sub i8 %conv.i, %sum26
  %mul.i = shl i8 %sub7.i.i, 6
  %sub.i5.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i
  %conv3.i.i = sext i8 %sub.i5.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i5.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %40 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %40, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa28custom_sub_multiple_variableIaEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %41 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %41) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa28custom_sub_multiple_variableIaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa28custom_sub_multiple_variableIaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %42 = phi i32 [ %17, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %42
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa28custom_sub_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %43 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i18 = sub nsw i64 %call.i17, %43
  %conv.i19 = sitofp i64 %sub.i18 to double
  %div.i = fdiv double %conv.i19, 1.000000e+06
  %44 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %44, null
  %45 = bitcast %struct.one_result* %44 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end8
  %46 = load i32, i32* @current_test, align 4, !tbaa !5
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %46, %47
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %48 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %add.i = add nsw i32 %48, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i to i64
  %mul.i21 = shl nsw i64 %conv.i20, 4
  %call.i22 = tail call i8* @realloc(i8* %45, i64 %mul.i21) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %49 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %50) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %51 = phi %struct.one_result* [ %49, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %52 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %52 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %51, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %51, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %52, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ia24custom_multiply_variableIaEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %mul.i.i = shl i8 %v1, 6
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat29 = shufflevector <16 x i8> %broadcast.splatinsert28, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa24custom_multiply_variableIaEEvT_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa24custom_multiply_variableIaEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa24custom_multiply_variableIaEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load27.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = mul <16 x i8> %wide.load.prol, %broadcast.splat29
  %17 = mul <16 x i8> %wide.load27.prol, %broadcast.splat29
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa40.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi26.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi26 = phi <16 x i8> [ %vec.phi26.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load27 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = mul <16 x i8> %wide.load, %broadcast.splat29
  %23 = mul <16 x i8> %wide.load27, %broadcast.splat29
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi26
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load27.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = mul <16 x i8> %wide.load.1, %broadcast.splat29
  %31 = mul <16 x i8> %wide.load27.1, %broadcast.splat29
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !49

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa42 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa41 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa40 = phi <16 x i8> [ %.lcssa40.unr, %vector.ph.split ], [ %.lcssa42, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa40, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <16 x i8> %bin.rdx33, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <16 x i8> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <16 x i8> %bin.rdx35, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx35, %rdx.shuf36
  %rdx.shuf38 = shufflevector <16 x i8> %bin.rdx37, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx39 = add <16 x i8> %bin.rdx37, %rdx.shuf38
  %35 = extractelement <16 x i8> %bin.rdx39, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %mul.i = mul i8 %36, %v1
  %add = add i8 %mul.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !50

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %mul.i17 = mul i8 %mul.i.i, %conv.i
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i17
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa24custom_multiply_variableIaEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa24custom_multiply_variableIaEEvT_S2_.exit

_Z26check_shifted_variable_sumIa24custom_multiply_variableIaEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa24custom_multiply_variableIaEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i18 = tail call i64 @clock() #5
  store i64 %call.i18, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i18, %41
  %conv.i19 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i19, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i = add nsw i32 %46, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i to i64
  %mul.i21 = shl nsw i64 %conv.i20, 4
  %call.i22 = tail call i8* @realloc(i8* %43, i64 %mul.i21) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %47 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia33custom_multiply_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %mul.i.i = shl i8 %v1, 6
  %mul3.i.i = mul i8 %mul.i.i, %v2
  %mul5.i.i = mul i8 %mul3.i.i, %v3
  %mul7.i.i = mul i8 %mul5.i.i, %v4
  %mul.i = mul i8 %v2, %v1
  %mul3.i = mul i8 %mul.i, %v3
  %mul5.i = mul i8 %mul3.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <16 x i8> undef, i8 %mul5.i, i32 0
  %broadcast.splat29 = shufflevector <16 x i8> %broadcast.splatinsert28, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa33custom_multiply_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa33custom_multiply_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa33custom_multiply_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load27.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = mul <16 x i8> %broadcast.splat29, %wide.load.prol
  %17 = mul <16 x i8> %broadcast.splat29, %wide.load27.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa40.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi26.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi26 = phi <16 x i8> [ %vec.phi26.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load27 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = mul <16 x i8> %broadcast.splat29, %wide.load
  %23 = mul <16 x i8> %broadcast.splat29, %wide.load27
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi26
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load27.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = mul <16 x i8> %broadcast.splat29, %wide.load.1
  %31 = mul <16 x i8> %broadcast.splat29, %wide.load27.1
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !51

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa42 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa41 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa40 = phi <16 x i8> [ %.lcssa40.unr, %vector.ph.split ], [ %.lcssa42, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa40, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <16 x i8> %bin.rdx33, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <16 x i8> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <16 x i8> %bin.rdx35, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx35, %rdx.shuf36
  %rdx.shuf38 = shufflevector <16 x i8> %bin.rdx37, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx39 = add <16 x i8> %bin.rdx37, %rdx.shuf38
  %35 = extractelement <16 x i8> %bin.rdx39, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %mul7.i = mul i8 %mul5.i, %36
  %add = add i8 %mul7.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !52

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %mul.i17 = mul i8 %mul7.i.i, %conv.i
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i17
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa33custom_multiply_multiple_variableIaEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa33custom_multiply_multiple_variableIaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa33custom_multiply_multiple_variableIaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa33custom_multiply_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i18 = tail call i64 @clock() #5
  store i64 %call.i18, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i18, %41
  %conv.i19 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i19, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i = add nsw i32 %46, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i to i64
  %mul.i21 = shl nsw i64 %conv.i20, 4
  %call.i22 = tail call i8* @realloc(i8* %43, i64 %mul.i21) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %47 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia34custom_multiply_multiple_variable2IaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %mul.i.i = mul i8 %v2, %v1
  %mul4.i.i = mul i8 %mul.i.i, %v3
  %mul6.i.i = mul i8 %mul4.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert29 = insertelement <16 x i8> undef, i8 %mul6.i.i, i32 0
  %broadcast.splat30 = shufflevector <16 x i8> %broadcast.splatinsert29, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa34custom_multiply_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa34custom_multiply_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa34custom_multiply_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load28.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = add <16 x i8> %broadcast.splat30, %wide.load.prol
  %17 = add <16 x i8> %broadcast.splat30, %wide.load28.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa41.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi27.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi27 = phi <16 x i8> [ %vec.phi27.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load28 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = add <16 x i8> %vec.phi, %broadcast.splat30
  %23 = add <16 x i8> %vec.phi27, %broadcast.splat30
  %24 = add <16 x i8> %22, %wide.load
  %25 = add <16 x i8> %23, %wide.load28
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load28.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = add <16 x i8> %24, %broadcast.splat30
  %31 = add <16 x i8> %25, %broadcast.splat30
  %32 = add <16 x i8> %30, %wide.load.1
  %33 = add <16 x i8> %31, %wide.load28.1
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !53

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa43 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa42 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa41 = phi <16 x i8> [ %.lcssa41.unr, %vector.ph.split ], [ %.lcssa43, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa42, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi33 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa41, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi33, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %rdx.shuf39 = shufflevector <16 x i8> %bin.rdx38, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx40 = add <16 x i8> %bin.rdx38, %rdx.shuf39
  %35 = extractelement <16 x i8> %bin.rdx40, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %add.i = add i8 %result.013.reg2mem.0, %mul6.i.i
  %add = add i8 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !54

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %add.i.i = add i8 %conv.i, %mul6.i.i
  %mul.i17 = shl i8 %add.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i17
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa34custom_multiply_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa34custom_multiply_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa34custom_multiply_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa34custom_multiply_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i18 = tail call i64 @clock() #5
  store i64 %call.i18, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i18, %41
  %conv.i19 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i19, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i24

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i24

if.then.i24:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i20 = add nsw i32 %46, 10
  store i32 %add.i20, i32* @allocated_results, align 4, !tbaa !5
  %conv.i21 = sext i32 %add.i20 to i64
  %mul.i22 = shl nsw i64 %conv.i21, 4
  %call.i23 = tail call i8* @realloc(i8* %43, i64 %mul.i22) #5
  store i8* %call.i23, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i23, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i24
  %47 = bitcast i8* %call.i23 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i24
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i25 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ia22custom_divide_variableIaEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %conv1.i.i = sext i8 %v1 to i32
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i8, i8* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa22custom_divide_variableIaEEvT_S2_.exit
  %14 = phi i32 [ %61, %_Z26check_shifted_variable_sumIa22custom_divide_variableIaEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa22custom_divide_variableIaEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i8, i8* %first, align 1, !tbaa !28
  %16 = load i8, i8* %12, align 1, !tbaa !28
  %17 = sext i8 %15 to i32
  %18 = sext i8 %16 to i32
  %19 = sdiv i32 %17, %conv1.i.i
  %20 = sdiv i32 %18, %conv1.i.i
  %21 = trunc i32 %19 to i8
  %22 = trunc i32 %20 to i8
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa30.unr = phi i8 [ 0, %vector.body.preheader ], [ %22, %vector.body.prol ]
  %.lcssa.unr = phi i8 [ 0, %vector.body.preheader ], [ %21, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i8 [ 0, %vector.body.preheader ], [ %21, %vector.body.prol ]
  %vec.phi27.unr = phi i8 [ 0, %vector.body.preheader ], [ %22, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i8 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %45, %vector.body ]
  %vec.phi27 = phi i8 [ %vec.phi27.unr, %vector.body.preheader.split.split ], [ %46, %vector.body ]
  %induction2629 = or i64 %index, 1
  %23 = getelementptr inbounds i8, i8* %first, i64 %index
  %24 = getelementptr inbounds i8, i8* %first, i64 %induction2629
  %25 = load i8, i8* %23, align 1, !tbaa !28
  %26 = load i8, i8* %24, align 1, !tbaa !28
  %27 = sext i8 %25 to i32
  %28 = sext i8 %26 to i32
  %29 = sdiv i32 %27, %conv1.i.i
  %30 = sdiv i32 %28, %conv1.i.i
  %31 = trunc i32 %29 to i8
  %32 = trunc i32 %30 to i8
  %33 = add i8 %31, %vec.phi
  %34 = add i8 %32, %vec.phi27
  %index.next = add i64 %index, 2
  %induction2629.1 = or i64 %index.next, 1
  %35 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %36 = getelementptr inbounds i8, i8* %first, i64 %induction2629.1
  %37 = load i8, i8* %35, align 1, !tbaa !28
  %38 = load i8, i8* %36, align 1, !tbaa !28
  %39 = sext i8 %37 to i32
  %40 = sext i8 %38 to i32
  %41 = sdiv i32 %39, %conv1.i.i
  %42 = sdiv i32 %40, %conv1.i.i
  %43 = trunc i32 %41 to i8
  %44 = trunc i32 %42 to i8
  %45 = add i8 %43, %33
  %46 = add i8 %44, %34
  %index.next.1 = add i64 %index.next, 2
  %47 = icmp eq i64 %index.next.1, %n.vec
  br i1 %47, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !55

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa34 = phi i8 [ %46, %vector.body ]
  %.lcssa33 = phi i8 [ %45, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi i8 [ %.lcssa30.unr, %vector.body.preheader.split ], [ %.lcssa34, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i8 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i8 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi i8 [ 0, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add i8 %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %48 = add i64 %resume.val, 1
  %49 = trunc i64 %48 to i32
  %50 = sub i32 %11, %49
  %51 = sub i32 %count, %49
  %xtraiter31 = and i32 %50, 3
  %lcmp.mod32 = icmp ne i32 %xtraiter31, 0
  br i1 %lcmp.mod32, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.013.reg2mem.0.prol = phi i8 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter31, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.prol
  %52 = load i8, i8* %arrayidx.prol, align 1, !tbaa !28
  %conv.i.prol = sext i8 %52 to i32
  %div.i.prol = sdiv i32 %conv.i.prol, %conv1.i.i
  %conv2.i.prol = trunc i32 %div.i.prol to i8
  %add.prol = add i8 %conv2.i.prol, %result.013.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !56

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i8 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i8 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.013.reg2mem.0.unr = phi i8 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %53 = icmp ult i32 %51, 3
  br i1 %53, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.013.reg2mem.0 = phi i8 [ %result.013.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %54 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %conv.i = sext i8 %54 to i32
  %div.i = sdiv i32 %conv.i, %conv1.i.i
  %conv2.i = trunc i32 %div.i to i8
  %add = add i8 %conv2.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.next
  %55 = load i8, i8* %arrayidx.1, align 1, !tbaa !28
  %conv.i.1 = sext i8 %55 to i32
  %div.i.1 = sdiv i32 %conv.i.1, %conv1.i.i
  %conv2.i.1 = trunc i32 %div.i.1 to i8
  %add.1 = add i8 %conv2.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.next.1
  %56 = load i8, i8* %arrayidx.2, align 1, !tbaa !28
  %conv.i.2 = sext i8 %56 to i32
  %div.i.2 = sdiv i32 %conv.i.2, %conv1.i.i
  %conv2.i.2 = trunc i32 %div.i.2 to i8
  %add.2 = add i8 %conv2.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.next.2
  %57 = load i8, i8* %arrayidx.3, align 1, !tbaa !28
  %conv.i.3 = sext i8 %57 to i32
  %div.i.3 = sdiv i32 %conv.i.3, %conv1.i.i
  %conv2.i.3 = trunc i32 %div.i.3 to i8
  %add.3 = add i8 %conv2.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !57

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i8 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i8 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %58 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i17 = fptosi double %58 to i8
  %conv.i.i = sext i8 %conv.i17 to i32
  %div.i.i = sdiv i32 %conv.i.i, %conv1.i.i
  %conv2.i.i = trunc i32 %div.i.i to i8
  %mul.i = shl i8 %conv2.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %59 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %59, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa22custom_divide_variableIaEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %60 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %60) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa22custom_divide_variableIaEEvT_S2_.exit

_Z26check_shifted_variable_sumIa22custom_divide_variableIaEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %61 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %61
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa22custom_divide_variableIaEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i18 = tail call i64 @clock() #5
  store i64 %call.i18, i64* @end_time, align 8, !tbaa !11
  %62 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i18, %62
  %conv.i19 = sitofp i64 %sub.i to double
  %div.i20 = fdiv double %conv.i19, 1.000000e+06
  %63 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %63, null
  %64 = bitcast %struct.one_result* %63 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i24

lor.lhs.false.i:                                  ; preds = %for.end8
  %65 = load i32, i32* @current_test, align 4, !tbaa !5
  %66 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %65, %66
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i24

if.then.i24:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %67 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %66, %lor.lhs.false.i ]
  %add.i = add nsw i32 %67, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i21 = sext i32 %add.i to i64
  %mul.i22 = shl nsw i64 %conv.i21, 4
  %call.i23 = tail call i8* @realloc(i8* %64, i64 %mul.i22) #5
  store i8* %call.i23, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i23, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i24
  %68 = bitcast i8* %call.i23 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i24
  %69 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i25 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %69) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %70 = phi %struct.one_result* [ %68, %if.then.if.end5_crit_edge.i ], [ %63, %lor.lhs.false.i ]
  %71 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %65, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %71 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %70, i64 %idxprom.i, i32 0
  store double %div.i20, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %70, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %71, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia31custom_divide_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %conv1.i.i = sext i8 %v1 to i32
  %conv2.i.i = sext i8 %v2 to i32
  %conv4.i.i = sext i8 %v3 to i32
  %conv6.i.i = sext i8 %v4 to i32
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa31custom_divide_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  %5 = phi i32 [ %36, %_Z26check_shifted_variable_sumIa31custom_divide_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa31custom_divide_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi = phi i8 [ %22, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi27 = phi i8 [ %23, %vector.body ], [ 0, %vector.body.preheader ]
  %induction2629 = or i64 %index, 1
  %6 = getelementptr inbounds i8, i8* %first, i64 %index
  %7 = getelementptr inbounds i8, i8* %first, i64 %induction2629
  %8 = load i8, i8* %6, align 1, !tbaa !28
  %9 = load i8, i8* %7, align 1, !tbaa !28
  %10 = sext i8 %8 to i32
  %11 = sext i8 %9 to i32
  %12 = sdiv i32 %10, %conv1.i.i
  %13 = sdiv i32 %11, %conv1.i.i
  %14 = sdiv i32 %12, %conv2.i.i
  %15 = sdiv i32 %13, %conv2.i.i
  %16 = sdiv i32 %14, %conv4.i.i
  %17 = sdiv i32 %15, %conv4.i.i
  %18 = sdiv i32 %16, %conv6.i.i
  %19 = sdiv i32 %17, %conv6.i.i
  %20 = trunc i32 %18 to i8
  %21 = trunc i32 %19 to i8
  %22 = add i8 %20, %vec.phi
  %23 = add i8 %21, %vec.phi27
  %index.next = add i64 %index, 2
  %24 = icmp eq i64 %index.next, %n.vec
  br i1 %24, label %middle.block.loopexit, label %vector.body, !llvm.loop !58

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa31 = phi i8 [ %23, %vector.body ]
  %.lcssa = phi i8 [ %22, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i8 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi i8 [ 0, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add i8 %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %25 = add i64 %resume.val, 1
  %26 = trunc i64 %25 to i32
  %27 = sub i32 %4, %26
  %28 = sub i32 %count, %26
  %xtraiter = and i32 %27, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %arrayidx.prol = getelementptr inbounds i8, i8* %first, i64 %resume.val
  %29 = load i8, i8* %arrayidx.prol, align 1, !tbaa !28
  %conv.i.prol = sext i8 %29 to i32
  %div.i.prol = sdiv i32 %conv.i.prol, %conv1.i.i
  %div3.i.prol = sdiv i32 %div.i.prol, %conv2.i.i
  %div5.i.prol = sdiv i32 %div3.i.prol, %conv4.i.i
  %div7.i.prol = sdiv i32 %div5.i.prol, %conv6.i.i
  %conv8.i.prol = trunc i32 %div7.i.prol to i8
  %add.prol = add i8 %conv8.i.prol, %bin.rdx
  %indvars.iv.next.prol = add nuw nsw i64 %resume.val, 1
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi i8 [ 0, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol, %for.body3.prol ]
  %result.013.reg2mem.0.unr = phi i8 [ %bin.rdx, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %30 = icmp ult i32 %28, 1
  br i1 %30, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.013.reg2mem.0 = phi i8 [ %result.013.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %31 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %conv.i = sext i8 %31 to i32
  %div.i = sdiv i32 %conv.i, %conv1.i.i
  %div3.i = sdiv i32 %div.i, %conv2.i.i
  %div5.i = sdiv i32 %div3.i, %conv4.i.i
  %div7.i = sdiv i32 %div5.i, %conv6.i.i
  %conv8.i = trunc i32 %div7.i to i8
  %add = add i8 %conv8.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.next
  %32 = load i8, i8* %arrayidx.1, align 1, !tbaa !28
  %conv.i.1 = sext i8 %32 to i32
  %div.i.1 = sdiv i32 %conv.i.1, %conv1.i.i
  %div3.i.1 = sdiv i32 %div.i.1, %conv2.i.i
  %div5.i.1 = sdiv i32 %div3.i.1, %conv4.i.i
  %div7.i.1 = sdiv i32 %div5.i.1, %conv6.i.i
  %conv8.i.1 = trunc i32 %div7.i.1 to i8
  %add.1 = add i8 %conv8.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !59

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi i8 [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i8 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %33 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i19 = fptosi double %33 to i8
  %conv.i.i = sext i8 %conv.i19 to i32
  %div.i.i = sdiv i32 %conv.i.i, %conv1.i.i
  %div3.i.i = sdiv i32 %div.i.i, %conv2.i.i
  %div5.i.i = sdiv i32 %div3.i.i, %conv4.i.i
  %div7.i.i = sdiv i32 %div5.i.i, %conv6.i.i
  %conv8.i.i = trunc i32 %div7.i.i to i8
  %mul.i20 = shl i8 %conv8.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i20
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %34 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %34, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa31custom_divide_multiple_variableIaEEvT_S2_S2_S2_S2_.exit, label %if.then.i22

if.then.i22:                                      ; preds = %for.end
  %35 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %35) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa31custom_divide_multiple_variableIaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa31custom_divide_multiple_variableIaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i22
  %36 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i22 ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %36
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa31custom_divide_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i23 = tail call i64 @clock() #5
  store i64 %call.i23, i64* @end_time, align 8, !tbaa !11
  %37 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i23, %37
  %conv.i24 = sitofp i64 %sub.i to double
  %div.i25 = fdiv double %conv.i24, 1.000000e+06
  %38 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %38, null
  %39 = bitcast %struct.one_result* %38 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i

lor.lhs.false.i:                                  ; preds = %for.end8
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %41 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %40, %41
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i

if.then.i:                                        ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %42 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %add.i = add nsw i32 %42, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i17, 4
  %call.i18 = tail call i8* @realloc(i8* %39, i64 %mul.i) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i
  %43 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %44) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %45 = phi %struct.one_result* [ %43, %if.then.if.end5_crit_edge.i ], [ %38, %lor.lhs.false.i ]
  %46 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %40, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %46 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %45, i64 %idxprom.i, i32 0
  store double %div.i25, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %45, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %46, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia32custom_divide_multiple_variable2IaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %conv1.i.i = sext i8 %v1 to i32
  %conv2.i.i = sext i8 %v2 to i32
  %div.i.i = sdiv i32 %conv1.i.i, %conv2.i.i
  %conv3.i.i = sext i8 %v3 to i32
  %div4.i.i = sdiv i32 %div.i.i, %conv3.i.i
  %conv5.i.i = sext i8 %v4 to i32
  %div6.i.i = sdiv i32 %div4.i.i, %conv5.i.i
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert29 = insertelement <4 x i32> undef, i32 %div6.i.i, i32 0
  %broadcast.splat30 = shufflevector <4 x i32> %broadcast.splatinsert29, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <4 x i8>*
  %12 = getelementptr i8, i8* %first, i64 4
  %13 = bitcast i8* %12 to <4 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa32custom_divide_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %52, %_Z26check_shifted_variable_sumIa32custom_divide_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa32custom_divide_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i8>, <4 x i8>* %11, align 1, !tbaa !28
  %wide.load28.prol = load <4 x i8>, <4 x i8>* %13, align 1, !tbaa !28
  %16 = zext <4 x i8> %wide.load.prol to <4 x i32>
  %17 = zext <4 x i8> %wide.load28.prol to <4 x i32>
  %18 = add <4 x i32> %broadcast.splat30, %16
  %19 = add <4 x i32> %broadcast.splat30, %17
  %20 = trunc <4 x i32> %18 to <4 x i8>
  %21 = trunc <4 x i32> %19 to <4 x i8>
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <4 x i8> [ zeroinitializer, %vector.ph ], [ %21, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i8> [ zeroinitializer, %vector.ph ], [ %20, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i8> [ zeroinitializer, %vector.ph ], [ %20, %vector.body.prol ]
  %vec.phi27.unr = phi <4 x i8> [ zeroinitializer, %vector.ph ], [ %21, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %44, %vector.body ]
  %vec.phi27 = phi <4 x i8> [ %vec.phi27.unr, %vector.ph.split.split ], [ %45, %vector.body ]
  %22 = getelementptr inbounds i8, i8* %first, i64 %index
  %23 = bitcast i8* %22 to <4 x i8>*
  %wide.load = load <4 x i8>, <4 x i8>* %23, align 1, !tbaa !28
  %24 = getelementptr i8, i8* %22, i64 4
  %25 = bitcast i8* %24 to <4 x i8>*
  %wide.load28 = load <4 x i8>, <4 x i8>* %25, align 1, !tbaa !28
  %26 = zext <4 x i8> %wide.load to <4 x i32>
  %27 = zext <4 x i8> %wide.load28 to <4 x i32>
  %28 = add <4 x i32> %broadcast.splat30, %26
  %29 = add <4 x i32> %broadcast.splat30, %27
  %30 = trunc <4 x i32> %28 to <4 x i8>
  %31 = trunc <4 x i32> %29 to <4 x i8>
  %32 = add <4 x i8> %30, %vec.phi
  %33 = add <4 x i8> %31, %vec.phi27
  %index.next = add i64 %index, 8
  %34 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %35 = bitcast i8* %34 to <4 x i8>*
  %wide.load.1 = load <4 x i8>, <4 x i8>* %35, align 1, !tbaa !28
  %36 = getelementptr i8, i8* %34, i64 4
  %37 = bitcast i8* %36 to <4 x i8>*
  %wide.load28.1 = load <4 x i8>, <4 x i8>* %37, align 1, !tbaa !28
  %38 = zext <4 x i8> %wide.load.1 to <4 x i32>
  %39 = zext <4 x i8> %wide.load28.1 to <4 x i32>
  %40 = add <4 x i32> %broadcast.splat30, %38
  %41 = add <4 x i32> %broadcast.splat30, %39
  %42 = trunc <4 x i32> %40 to <4 x i8>
  %43 = trunc <4 x i32> %41 to <4 x i8>
  %44 = add <4 x i8> %42, %32
  %45 = add <4 x i8> %43, %33
  %index.next.1 = add i64 %index.next, 8
  %46 = icmp eq i64 %index.next.1, %n.vec
  br i1 %46, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !60

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <4 x i8> [ %45, %vector.body ]
  %.lcssa38 = phi <4 x i8> [ %44, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <4 x i8> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi33 = phi <4 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <4 x i8> %rdx.vec.exit.phi33, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i8> %bin.rdx, <4 x i8> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx34 = add <4 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf35 = shufflevector <4 x i8> %bin.rdx34, <4 x i8> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <4 x i8> %bin.rdx34, %rdx.shuf35
  %47 = extractelement <4 x i8> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %47, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %48 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %conv8.i = zext i8 %48 to i32
  %add.i = add i32 %div6.i.i, %conv8.i
  %conv7.i = trunc i32 %add.i to i8
  %add = add i8 %conv7.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !61

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %47, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %49 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i19 = fptosi double %49 to i8
  %conv8.i.i = zext i8 %conv.i19 to i32
  %add.i.i = add i32 %div6.i.i, %conv8.i.i
  %conv7.i.i = trunc i32 %add.i.i to i8
  %mul.i20 = shl i8 %conv7.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i20
  %conv3.i5.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i5.i
  %50 = select i1 %ispos.i.i, i32 %conv3.i5.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %50, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa32custom_divide_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit, label %if.then.i22

if.then.i22:                                      ; preds = %for.end
  %51 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %51) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa32custom_divide_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa32custom_divide_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i22
  %52 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i22 ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %52
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa32custom_divide_multiple_variable2IaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i23 = tail call i64 @clock() #5
  store i64 %call.i23, i64* @end_time, align 8, !tbaa !11
  %53 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i23, %53
  %conv.i24 = sitofp i64 %sub.i to double
  %div.i25 = fdiv double %conv.i24, 1.000000e+06
  %54 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %54, null
  %55 = bitcast %struct.one_result* %54 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i

lor.lhs.false.i:                                  ; preds = %for.end8
  %56 = load i32, i32* @current_test, align 4, !tbaa !5
  %57 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %56, %57
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i

if.then.i:                                        ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %58 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %57, %lor.lhs.false.i ]
  %add.i17 = add nsw i32 %58, 10
  store i32 %add.i17, i32* @allocated_results, align 4, !tbaa !5
  %conv.i = sext i32 %add.i17 to i64
  %mul.i = shl nsw i64 %conv.i, 4
  %call.i18 = tail call i8* @realloc(i8* %55, i64 %mul.i) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i
  %59 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i
  %60 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %60) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %61 = phi %struct.one_result* [ %59, %if.then.if.end5_crit_edge.i ], [ %54, %lor.lhs.false.i ]
  %62 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %56, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %62 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %61, i64 %idxprom.i, i32 0
  store double %div.i25, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %61, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %62, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia30custom_mixed_multiple_variableIaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %conv17.i.i = zext i8 %v1 to i32
  %conv2.i.i = sext i8 %v2 to i32
  %conv3.i.i = sext i8 %v3 to i32
  %mul.i.i = mul nsw i32 %conv3.i.i, %conv2.i.i
  %conv4.i.i = sext i8 %v4 to i32
  %div.i.i = sdiv i32 %mul.i.i, %conv4.i.i
  %add.i.i = sub i32 %conv17.i.i, %div.i.i
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert31 = insertelement <4 x i32> undef, i32 %conv17.i.i, i32 0
  %broadcast.splat32 = shufflevector <4 x i32> %broadcast.splatinsert31, <4 x i32> undef, <4 x i32> zeroinitializer
  %broadcast.splatinsert33 = insertelement <4 x i32> undef, i32 %div.i.i, i32 0
  %broadcast.splat34 = shufflevector <4 x i32> %broadcast.splatinsert33, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa30custom_mixed_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  %4 = phi i32 [ %25, %_Z26check_shifted_variable_sumIa30custom_mixed_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa30custom_mixed_multiple_variableIaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body ]
  %vec.phi29 = phi <4 x i8> [ zeroinitializer, %vector.ph ], [ %18, %vector.body ]
  %5 = getelementptr inbounds i8, i8* %first, i64 %index
  %6 = bitcast i8* %5 to <4 x i8>*
  %wide.load = load <4 x i8>, <4 x i8>* %6, align 1, !tbaa !28
  %7 = getelementptr i8, i8* %5, i64 4
  %8 = bitcast i8* %7 to <4 x i8>*
  %wide.load30 = load <4 x i8>, <4 x i8>* %8, align 1, !tbaa !28
  %9 = zext <4 x i8> %wide.load to <4 x i32>
  %10 = zext <4 x i8> %wide.load30 to <4 x i32>
  %11 = add nuw nsw <4 x i32> %9, %broadcast.splat32
  %12 = add nuw nsw <4 x i32> %10, %broadcast.splat32
  %13 = sub <4 x i32> %11, %broadcast.splat34
  %14 = sub <4 x i32> %12, %broadcast.splat34
  %15 = trunc <4 x i32> %13 to <4 x i8>
  %16 = trunc <4 x i32> %14 to <4 x i8>
  %17 = add <4 x i8> %15, %vec.phi
  %18 = add <4 x i8> %16, %vec.phi29
  %index.next = add i64 %index, 8
  %19 = icmp eq i64 %index.next, %n.vec
  br i1 %19, label %middle.block.loopexit, label %vector.body, !llvm.loop !62

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa42 = phi <4 x i8> [ %18, %vector.body ]
  %.lcssa = phi <4 x i8> [ %17, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi37 = phi <4 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa42, %middle.block.loopexit ]
  %bin.rdx = add <4 x i8> %rdx.vec.exit.phi37, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i8> %bin.rdx, <4 x i8> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx38 = add <4 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf39 = shufflevector <4 x i8> %bin.rdx38, <4 x i8> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx40 = add <4 x i8> %bin.rdx38, %rdx.shuf39
  %20 = extractelement <4 x i8> %bin.rdx40, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %20, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %21 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %conv6.i = zext i8 %21 to i32
  %add.i = add nuw nsw i32 %conv6.i, %conv17.i.i
  %sub.i = sub i32 %add.i, %div.i.i
  %conv5.i = trunc i32 %sub.i to i8
  %add = add i8 %conv5.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !63

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %20, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %22 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i20 = fptosi double %22 to i8
  %conv6.i.i = zext i8 %conv.i20 to i32
  %sub.i.i = add i32 %add.i.i, %conv6.i.i
  %conv5.i.i = trunc i32 %sub.i.i to i8
  %mul.i21 = shl i8 %conv5.i.i, 6
  %sub.i5.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i21
  %conv3.i6.i = sext i8 %sub.i5.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i5.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i6.i
  %23 = select i1 %ispos.i.i, i32 %conv3.i6.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %23, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa30custom_mixed_multiple_variableIaEEvT_S2_S2_S2_S2_.exit, label %if.then.i23

if.then.i23:                                      ; preds = %for.end
  %24 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %24) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa30custom_mixed_multiple_variableIaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa30custom_mixed_multiple_variableIaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i23
  %25 = phi i32 [ %4, %for.end ], [ %.pre, %if.then.i23 ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %25
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa30custom_mixed_multiple_variableIaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i24 = tail call i64 @clock() #5
  store i64 %call.i24, i64* @end_time, align 8, !tbaa !11
  %26 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i25 = sub nsw i64 %call.i24, %26
  %conv.i26 = sitofp i64 %sub.i25 to double
  %div.i27 = fdiv double %conv.i26, 1.000000e+06
  %27 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %27, null
  %28 = bitcast %struct.one_result* %27 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i

lor.lhs.false.i:                                  ; preds = %for.end8
  %29 = load i32, i32* @current_test, align 4, !tbaa !5
  %30 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %29, %30
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i

if.then.i:                                        ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %31 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %30, %lor.lhs.false.i ]
  %add.i17 = add nsw i32 %31, 10
  store i32 %add.i17, i32* @allocated_results, align 4, !tbaa !5
  %conv.i = sext i32 %add.i17 to i64
  %mul.i18 = shl nsw i64 %conv.i, 4
  %call.i19 = tail call i8* @realloc(i8* %28, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i
  %32 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i
  %33 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %33) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %34 = phi %struct.one_result* [ %32, %if.then.if.end5_crit_edge.i ], [ %27, %lor.lhs.false.i ]
  %35 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %29, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %35 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %34, i64 %idxprom.i, i32 0
  store double %div.i27, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %34, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %35, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ia19custom_variable_andIaEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat28 = shufflevector <16 x i8> %broadcast.splatinsert27, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa19custom_variable_andIaEEvT_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa19custom_variable_andIaEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa19custom_variable_andIaEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load26.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = and <16 x i8> %wide.load.prol, %broadcast.splat28
  %17 = and <16 x i8> %wide.load26.prol, %broadcast.splat28
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa39.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <16 x i8> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load26 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = and <16 x i8> %wide.load, %broadcast.splat28
  %23 = and <16 x i8> %wide.load26, %broadcast.splat28
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi25
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load26.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = and <16 x i8> %wide.load.1, %broadcast.splat28
  %31 = and <16 x i8> %wide.load26.1, %broadcast.splat28
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !64

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa40 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <16 x i8> [ %.lcssa39.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %35 = extractelement <16 x i8> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %and3.i = and i8 %36, %v1
  %add = add i8 %and3.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !65

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %and3.i.i = and i8 %conv.i, %v1
  %mul.i = shl i8 %and3.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa19custom_variable_andIaEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa19custom_variable_andIaEEvT_S2_.exit

_Z26check_shifted_variable_sumIa19custom_variable_andIaEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa19custom_variable_andIaEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %41
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i = add nsw i32 %46, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %43, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %47 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia28custom_multiple_variable_andIaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %and9.i.i = and i8 %v2, %v1
  %and310.i.i = and i8 %and9.i.i, %v3
  %and511.i.i = and i8 %and310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <16 x i8> undef, i8 %and511.i.i, i32 0
  %broadcast.splat28 = shufflevector <16 x i8> %broadcast.splatinsert27, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa28custom_multiple_variable_andIaEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa28custom_multiple_variable_andIaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa28custom_multiple_variable_andIaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load26.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = and <16 x i8> %broadcast.splat28, %wide.load.prol
  %17 = and <16 x i8> %broadcast.splat28, %wide.load26.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa39.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <16 x i8> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load26 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = and <16 x i8> %broadcast.splat28, %wide.load
  %23 = and <16 x i8> %broadcast.splat28, %wide.load26
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi25
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load26.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = and <16 x i8> %broadcast.splat28, %wide.load.1
  %31 = and <16 x i8> %broadcast.splat28, %wide.load26.1
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !66

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa40 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <16 x i8> [ %.lcssa39.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %35 = extractelement <16 x i8> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %and712.i = and i8 %and511.i.i, %36
  %add = add i8 %and712.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !67

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %and712.i.i = and i8 %and511.i.i, %conv.i
  %mul.i = shl i8 %and712.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa28custom_multiple_variable_andIaEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa28custom_multiple_variable_andIaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa28custom_multiple_variable_andIaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa28custom_multiple_variable_andIaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %41
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i = add nsw i32 %46, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %43, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %47 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ia18custom_variable_orIaEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat28 = shufflevector <16 x i8> %broadcast.splatinsert27, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa18custom_variable_orIaEEvT_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa18custom_variable_orIaEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa18custom_variable_orIaEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load26.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = or <16 x i8> %wide.load.prol, %broadcast.splat28
  %17 = or <16 x i8> %wide.load26.prol, %broadcast.splat28
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa39.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <16 x i8> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load26 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = or <16 x i8> %wide.load, %broadcast.splat28
  %23 = or <16 x i8> %wide.load26, %broadcast.splat28
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi25
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load26.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = or <16 x i8> %wide.load.1, %broadcast.splat28
  %31 = or <16 x i8> %wide.load26.1, %broadcast.splat28
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !68

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa40 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <16 x i8> [ %.lcssa39.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %35 = extractelement <16 x i8> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %or3.i = or i8 %36, %v1
  %add = add i8 %or3.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !69

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %or3.i.i = or i8 %conv.i, %v1
  %mul.i = shl i8 %or3.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa18custom_variable_orIaEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa18custom_variable_orIaEEvT_S2_.exit

_Z26check_shifted_variable_sumIa18custom_variable_orIaEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa18custom_variable_orIaEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %41
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i = add nsw i32 %46, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %43, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %47 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia27custom_multiple_variable_orIaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %or9.i.i = or i8 %v2, %v1
  %or310.i.i = or i8 %or9.i.i, %v3
  %or511.i.i = or i8 %or310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <16 x i8> undef, i8 %or511.i.i, i32 0
  %broadcast.splat28 = shufflevector <16 x i8> %broadcast.splatinsert27, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa27custom_multiple_variable_orIaEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa27custom_multiple_variable_orIaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa27custom_multiple_variable_orIaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load26.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = or <16 x i8> %broadcast.splat28, %wide.load.prol
  %17 = or <16 x i8> %broadcast.splat28, %wide.load26.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa39.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <16 x i8> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load26 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = or <16 x i8> %broadcast.splat28, %wide.load
  %23 = or <16 x i8> %broadcast.splat28, %wide.load26
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi25
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load26.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = or <16 x i8> %broadcast.splat28, %wide.load.1
  %31 = or <16 x i8> %broadcast.splat28, %wide.load26.1
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !70

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa40 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <16 x i8> [ %.lcssa39.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %35 = extractelement <16 x i8> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %or712.i = or i8 %or511.i.i, %36
  %add = add i8 %or712.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !71

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %or712.i.i = or i8 %or511.i.i, %conv.i
  %mul.i = shl i8 %or712.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa27custom_multiple_variable_orIaEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa27custom_multiple_variable_orIaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa27custom_multiple_variable_orIaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa27custom_multiple_variable_orIaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %41
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i = add nsw i32 %46, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %43, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %47 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ia19custom_variable_xorIaEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat28 = shufflevector <16 x i8> %broadcast.splatinsert27, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa19custom_variable_xorIaEEvT_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa19custom_variable_xorIaEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa19custom_variable_xorIaEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load26.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = xor <16 x i8> %wide.load.prol, %broadcast.splat28
  %17 = xor <16 x i8> %wide.load26.prol, %broadcast.splat28
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa39.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <16 x i8> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load26 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = xor <16 x i8> %wide.load, %broadcast.splat28
  %23 = xor <16 x i8> %wide.load26, %broadcast.splat28
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi25
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load26.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = xor <16 x i8> %wide.load.1, %broadcast.splat28
  %31 = xor <16 x i8> %wide.load26.1, %broadcast.splat28
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !72

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa40 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <16 x i8> [ %.lcssa39.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %35 = extractelement <16 x i8> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %xor3.i = xor i8 %36, %v1
  %add = add i8 %xor3.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !73

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %xor3.i.i = xor i8 %conv.i, %v1
  %mul.i = shl i8 %xor3.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa19custom_variable_xorIaEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa19custom_variable_xorIaEEvT_S2_.exit

_Z26check_shifted_variable_sumIa19custom_variable_xorIaEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa19custom_variable_xorIaEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %41
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i = add nsw i32 %46, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %43, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %47 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ia28custom_multiple_variable_xorIaEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 signext %v1, i8 signext %v2, i8 signext %v3, i8 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %xor9.i.i = xor i8 %v2, %v1
  %xor310.i.i = xor i8 %xor9.i.i, %v3
  %xor511.i.i = xor i8 %xor310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <16 x i8> undef, i8 %xor511.i.i, i32 0
  %broadcast.splat28 = shufflevector <16 x i8> %broadcast.splatinsert27, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIa28custom_multiple_variable_xorIaEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %40, %_Z26check_shifted_variable_sumIa28custom_multiple_variable_xorIaEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIa28custom_multiple_variable_xorIaEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load26.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = xor <16 x i8> %broadcast.splat28, %wide.load.prol
  %17 = xor <16 x i8> %broadcast.splat28, %wide.load26.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa39.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <16 x i8> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load26 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = xor <16 x i8> %broadcast.splat28, %wide.load
  %23 = xor <16 x i8> %broadcast.splat28, %wide.load26
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi25
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load26.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = xor <16 x i8> %broadcast.splat28, %wide.load.1
  %31 = xor <16 x i8> %broadcast.splat28, %wide.load26.1
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !74

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa40 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <16 x i8> [ %.lcssa39.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %35 = extractelement <16 x i8> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %xor712.i = xor i8 %xor511.i.i, %36
  %add = add i8 %xor712.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !75

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i8
  %xor712.i.i = xor i8 %xor511.i.i, %conv.i
  %mul.i = shl i8 %xor712.i.i, 6
  %sub.i.i = sub i8 %result.0.lcssa.reg2mem.0, %mul.i
  %conv3.i.i = sext i8 %sub.i.i to i32
  %ispos.i.i = icmp sgt i8 %sub.i.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %38 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %38, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIa28custom_multiple_variable_xorIaEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %39 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %39) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIa28custom_multiple_variable_xorIaEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIa28custom_multiple_variable_xorIaEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %40 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %40
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIa28custom_multiple_variable_xorIaEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %41 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %41
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %42 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %42, null
  %43 = bitcast %struct.one_result* %42 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %44, %45
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %46 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %add.i = add nsw i32 %46, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %43, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %47 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %48) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %49 = phi %struct.one_result* [ %47, %if.then.if.end5_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %50 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %50 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %49, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %50, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ih19custom_add_variableIhEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat27 = shufflevector <16 x i8> %broadcast.splatinsert26, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load25.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = add <16 x i8> %broadcast.splat27, %wide.load.prol
  %17 = add <16 x i8> %broadcast.splat27, %wide.load25.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa38.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <16 x i8> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load25 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = add <16 x i8> %vec.phi, %broadcast.splat27
  %23 = add <16 x i8> %vec.phi24, %broadcast.splat27
  %24 = add <16 x i8> %22, %wide.load
  %25 = add <16 x i8> %23, %wide.load25
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load25.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = add <16 x i8> %24, %broadcast.splat27
  %31 = add <16 x i8> %25, %broadcast.splat27
  %32 = add <16 x i8> %30, %wide.load.1
  %33 = add <16 x i8> %31, %wide.load25.1
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !76

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa40 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa39 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa38 = phi <16 x i8> [ %.lcssa38.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa38, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <16 x i8> %bin.rdx31, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <16 x i8> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <16 x i8> %bin.rdx33, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <16 x i8> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <16 x i8> %bin.rdx35, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx35, %rdx.shuf36
  %35 = extractelement <16 x i8> %bin.rdx37, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %add.i = add i8 %result.011.reg2mem.0, %v1
  %add = add i8 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !77

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %add.i.i = add i8 %conv.i, %v1
  %mul.i = shl i8 %add.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit

_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i17 = add nsw i32 %45, 10
  store i32 %add.i17, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i17 to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1Ih19custom_add_variableIhEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp16 = icmp sgt i32 %0, 0
  br i1 %cmp16, label %for.cond1.preheader.preheader, label %for.end12

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp213 = icmp sgt i32 %count, 0
  %conv6 = zext i8 %v1 to i32
  %mul = mul nsw i32 %conv6, %count
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = sext i32 %count to i64
  %4 = lshr i64 %3, 5
  %5 = mul i64 %4, 32
  %6 = add i64 %5, -32
  %7 = lshr i64 %6, 5
  %8 = add i64 %7, 1
  %backedge.overflow = icmp eq i32 %count, 0
  %n.vec = and i64 %2, -32
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %8, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %9 = icmp ult i64 %7, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit
  %10 = phi i32 [ %45, %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.017 = phi i32 [ %inc11, %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp213, label %polly.stmt.for.inc.preheader, label %for.end

polly.stmt.for.inc.preheader:                     ; preds = %for.cond1.preheader
  br i1 %backedge.overflow, label %polly.stmt.for.inc.preheader38, label %overflow.checked

polly.stmt.for.inc.preheader38:                   ; preds = %middle.block, %polly.stmt.for.inc.preheader
  %result.014.reg2mem.0.ph = phi i8 [ 0, %polly.stmt.for.inc.preheader ], [ %42, %middle.block ]
  %polly.indvar.ph = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %resume.val, %middle.block ]
  br label %polly.stmt.for.inc

overflow.checked:                                 ; preds = %polly.stmt.for.inc.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.preheader.split

vector.body.prol.preheader:                       ; preds = %vector.body.preheader
  br label %vector.body.prol

vector.body.prol:                                 ; preds = %vector.body.prol.preheader, %vector.body.prol
  %index.prol = phi i64 [ %index.next.prol, %vector.body.prol ], [ 0, %vector.body.prol.preheader ]
  %vec.phi.prol = phi <16 x i8> [ %15, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %vec.phi25.prol = phi <16 x i8> [ %16, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %vector.body.prol ], [ %xtraiter, %vector.body.prol.preheader ]
  %11 = getelementptr i8, i8* %first, i64 %index.prol
  %12 = bitcast i8* %11 to <16 x i8>*
  %wide.load.prol = load <16 x i8>, <16 x i8>* %12, align 1, !alias.scope !78, !noalias !80
  %13 = getelementptr i8, i8* %11, i64 16
  %14 = bitcast i8* %13 to <16 x i8>*
  %wide.load27.prol = load <16 x i8>, <16 x i8>* %14, align 1, !alias.scope !78, !noalias !80
  %15 = add <16 x i8> %wide.load.prol, %vec.phi.prol
  %16 = add <16 x i8> %wide.load27.prol, %vec.phi25.prol
  %index.next.prol = add i64 %index.prol, 32
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %vector.body.prol, label %vector.body.preheader.split.loopexit, !llvm.loop !85

vector.body.preheader.split.loopexit:             ; preds = %vector.body.prol
  %index.next.prol.lcssa = phi i64 [ %index.next.prol, %vector.body.prol ]
  %.lcssa43 = phi <16 x i8> [ %16, %vector.body.prol ]
  %.lcssa42 = phi <16 x i8> [ %15, %vector.body.prol ]
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.preheader.split.loopexit, %vector.body.preheader
  %.lcssa39.unr = phi <16 x i8> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa43, %vector.body.preheader.split.loopexit ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa42, %vector.body.preheader.split.loopexit ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ %index.next.prol.lcssa, %vector.body.preheader.split.loopexit ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa42, %vector.body.preheader.split.loopexit ]
  %vec.phi25.unr = phi <16 x i8> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa43, %vector.body.preheader.split.loopexit ]
  br i1 %9, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.3, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %39, %vector.body ]
  %vec.phi25 = phi <16 x i8> [ %vec.phi25.unr, %vector.body.preheader.split.split ], [ %40, %vector.body ]
  %17 = getelementptr i8, i8* %first, i64 %index
  %18 = bitcast i8* %17 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %18, align 1, !alias.scope !78, !noalias !80
  %19 = getelementptr i8, i8* %17, i64 16
  %20 = bitcast i8* %19 to <16 x i8>*
  %wide.load27 = load <16 x i8>, <16 x i8>* %20, align 1, !alias.scope !78, !noalias !80
  %21 = add <16 x i8> %wide.load, %vec.phi
  %22 = add <16 x i8> %wide.load27, %vec.phi25
  %index.next = add i64 %index, 32
  %23 = getelementptr i8, i8* %first, i64 %index.next
  %24 = bitcast i8* %23 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %24, align 1, !alias.scope !78, !noalias !80
  %25 = getelementptr i8, i8* %23, i64 16
  %26 = bitcast i8* %25 to <16 x i8>*
  %wide.load27.1 = load <16 x i8>, <16 x i8>* %26, align 1, !alias.scope !78, !noalias !80
  %27 = add <16 x i8> %wide.load.1, %21
  %28 = add <16 x i8> %wide.load27.1, %22
  %index.next.1 = add i64 %index.next, 32
  %29 = getelementptr i8, i8* %first, i64 %index.next.1
  %30 = bitcast i8* %29 to <16 x i8>*
  %wide.load.2 = load <16 x i8>, <16 x i8>* %30, align 1, !alias.scope !78, !noalias !80
  %31 = getelementptr i8, i8* %29, i64 16
  %32 = bitcast i8* %31 to <16 x i8>*
  %wide.load27.2 = load <16 x i8>, <16 x i8>* %32, align 1, !alias.scope !78, !noalias !80
  %33 = add <16 x i8> %wide.load.2, %27
  %34 = add <16 x i8> %wide.load27.2, %28
  %index.next.2 = add i64 %index.next.1, 32
  %35 = getelementptr i8, i8* %first, i64 %index.next.2
  %36 = bitcast i8* %35 to <16 x i8>*
  %wide.load.3 = load <16 x i8>, <16 x i8>* %36, align 1, !alias.scope !78, !noalias !80
  %37 = getelementptr i8, i8* %35, i64 16
  %38 = bitcast i8* %37 to <16 x i8>*
  %wide.load27.3 = load <16 x i8>, <16 x i8>* %38, align 1, !alias.scope !78, !noalias !80
  %39 = add <16 x i8> %wide.load.3, %33
  %40 = add <16 x i8> %wide.load27.3, %34
  %index.next.3 = add i64 %index.next.2, 32
  %41 = icmp eq i64 %index.next.3, %n.vec
  br i1 %41, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !86

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <16 x i8> [ %40, %vector.body ]
  %.lcssa40 = phi <16 x i8> [ %39, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <16 x i8> [ %.lcssa39.unr, %vector.body.preheader.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <16 x i8> %bin.rdx31, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <16 x i8> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <16 x i8> %bin.rdx33, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <16 x i8> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <16 x i8> %bin.rdx35, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx35, %rdx.shuf36
  %42 = extractelement <16 x i8> %bin.rdx37, i32 0
  %cmp.n = icmp eq i64 %2, %resume.val
  br i1 %cmp.n, label %for.end, label %polly.stmt.for.inc.preheader38

for.end.loopexit:                                 ; preds = %polly.stmt.for.inc
  %p_add.lcssa = phi i8 [ %p_add, %polly.stmt.for.inc ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %42, %middle.block ], [ %p_add.lcssa, %for.end.loopexit ]
  %conv7 = zext i8 %result.0.lcssa.reg2mem.0 to i32
  %add8 = add nsw i32 %conv7, %mul
  %conv9 = trunc i32 %add8 to i8
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %43 to i8
  %add.i.i = add i8 %conv.i, %v1
  %mul.i = shl i8 %add.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %conv9
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit

_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %10, %for.end ], [ %.pre, %if.then.i ]
  %inc11 = add nuw nsw i32 %i.017, 1
  %cmp = icmp slt i32 %inc11, %45
  br i1 %cmp, label %for.cond1.preheader, label %for.end12.loopexit

for.end12.loopexit:                               ; preds = %_Z26check_shifted_variable_sumIh19custom_add_variableIhEEvT_S2_.exit
  br label %for.end12

for.end12:                                        ; preds = %for.end12.loopexit, %entry
  %call.i18 = tail call i64 @clock() #5
  store i64 %call.i18, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i18, %46
  %conv.i19 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i19, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end12
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end12
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i = add nsw i32 %51, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i to i64
  %mul.i21 = shl nsw i64 %conv.i20, 4
  %call.i22 = tail call i8* @realloc(i8* %48, i64 %mul.i21) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %52 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void

polly.stmt.for.inc:                               ; preds = %polly.stmt.for.inc.preheader38, %polly.stmt.for.inc
  %result.014.reg2mem.0 = phi i8 [ %p_add, %polly.stmt.for.inc ], [ %result.014.reg2mem.0.ph, %polly.stmt.for.inc.preheader38 ]
  %polly.indvar = phi i64 [ %polly.indvar_next, %polly.stmt.for.inc ], [ %polly.indvar.ph, %polly.stmt.for.inc.preheader38 ]
  %scevgep = getelementptr i8, i8* %first, i64 %polly.indvar
  %_p_scalar_ = load i8, i8* %scevgep, align 1, !alias.scope !78, !noalias !80
  %p_add = add i8 %_p_scalar_, %result.014.reg2mem.0
  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
  %exitcond = icmp eq i64 %polly.indvar_next, %1
  br i1 %exitcond, label %for.end.loopexit, label %polly.stmt.for.inc, !llvm.loop !87
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih28custom_add_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %add.i.i = add i8 %v2, %v1
  %add3.i.i = add i8 %add.i.i, %v3
  %add5.i.i = add i8 %add3.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <16 x i8> undef, i8 %add5.i.i, i32 0
  %broadcast.splat27 = shufflevector <16 x i8> %broadcast.splatinsert26, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh28custom_add_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh28custom_add_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh28custom_add_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load25.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = add <16 x i8> %broadcast.splat27, %wide.load.prol
  %17 = add <16 x i8> %broadcast.splat27, %wide.load25.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa38.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <16 x i8> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load25 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = add <16 x i8> %broadcast.splat27, %vec.phi
  %23 = add <16 x i8> %broadcast.splat27, %vec.phi24
  %24 = add <16 x i8> %22, %wide.load
  %25 = add <16 x i8> %23, %wide.load25
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load25.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = add <16 x i8> %broadcast.splat27, %24
  %31 = add <16 x i8> %broadcast.splat27, %25
  %32 = add <16 x i8> %30, %wide.load.1
  %33 = add <16 x i8> %31, %wide.load25.1
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !88

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa40 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa39 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa38 = phi <16 x i8> [ %.lcssa38.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa38, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <16 x i8> %bin.rdx31, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <16 x i8> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <16 x i8> %bin.rdx33, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <16 x i8> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <16 x i8> %bin.rdx35, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx35, %rdx.shuf36
  %35 = extractelement <16 x i8> %bin.rdx37, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %add7.i = add i8 %add5.i.i, %result.011.reg2mem.0
  %add = add i8 %add7.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !89

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %add7.i.i = add i8 %add5.i.i, %conv.i
  %mul.i = shl i8 %add7.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh28custom_add_multiple_variableIhEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh28custom_add_multiple_variableIhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh28custom_add_multiple_variableIhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh28custom_add_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i17 = add nsw i32 %45, 10
  store i32 %add.i17, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i17 to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ih19custom_sub_variableIhEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat27 = shufflevector <16 x i8> %broadcast.splatinsert26, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh19custom_sub_variableIhEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh19custom_sub_variableIhEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh19custom_sub_variableIhEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load25.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = sub <16 x i8> %wide.load.prol, %broadcast.splat27
  %17 = sub <16 x i8> %wide.load25.prol, %broadcast.splat27
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa38.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <16 x i8> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load25 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = sub <16 x i8> %wide.load, %broadcast.splat27
  %23 = sub <16 x i8> %wide.load25, %broadcast.splat27
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi24
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load25.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = sub <16 x i8> %wide.load.1, %broadcast.splat27
  %31 = sub <16 x i8> %wide.load25.1, %broadcast.splat27
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !90

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa40 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa39 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa38 = phi <16 x i8> [ %.lcssa38.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa38, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <16 x i8> %bin.rdx31, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <16 x i8> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <16 x i8> %bin.rdx33, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <16 x i8> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <16 x i8> %bin.rdx35, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx35, %rdx.shuf36
  %35 = extractelement <16 x i8> %bin.rdx37, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %sub.i = sub i8 %36, %v1
  %add = add i8 %sub.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !91

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %sub.i.i = sub i8 %conv.i, %v1
  %mul.i = shl i8 %sub.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh19custom_sub_variableIhEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh19custom_sub_variableIhEEvT_S2_.exit

_Z26check_shifted_variable_sumIh19custom_sub_variableIhEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh19custom_sub_variableIhEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i16 = sub nsw i64 %call.i15, %40
  %conv.i17 = sitofp i64 %sub.i16 to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih28custom_sub_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %sum = add i8 %v2, %v1
  %sum23 = add i8 %sum, %v3
  %sum24 = add i8 %sum23, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert31 = insertelement <16 x i8> undef, i8 %sum24, i32 0
  %broadcast.splat32 = shufflevector <16 x i8> %broadcast.splatinsert31, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = sub <16 x i8> zeroinitializer, %broadcast.splat32
  %15 = sub <16 x i8> zeroinitializer, %broadcast.splat32
  %16 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh28custom_sub_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  %17 = phi i32 [ %41, %_Z26check_shifted_variable_sumIh28custom_sub_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh28custom_sub_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load30.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %18 = add <16 x i8> %14, %wide.load.prol
  %19 = add <16 x i8> %15, %wide.load30.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa43.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi29.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %16, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %34, %vector.body ]
  %vec.phi29 = phi <16 x i8> [ %vec.phi29.unr, %vector.ph.split.split ], [ %35, %vector.body ]
  %20 = getelementptr inbounds i8, i8* %first, i64 %index
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = getelementptr i8, i8* %20, i64 16
  %23 = bitcast i8* %22 to <16 x i8>*
  %wide.load30 = load <16 x i8>, <16 x i8>* %23, align 1, !tbaa !28
  %24 = sub <16 x i8> %vec.phi, %broadcast.splat32
  %25 = sub <16 x i8> %vec.phi29, %broadcast.splat32
  %26 = add <16 x i8> %24, %wide.load
  %27 = add <16 x i8> %25, %wide.load30
  %index.next = add i64 %index, 32
  %28 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = getelementptr i8, i8* %28, i64 16
  %31 = bitcast i8* %30 to <16 x i8>*
  %wide.load30.1 = load <16 x i8>, <16 x i8>* %31, align 1, !tbaa !28
  %32 = sub <16 x i8> %26, %broadcast.splat32
  %33 = sub <16 x i8> %27, %broadcast.splat32
  %34 = add <16 x i8> %32, %wide.load.1
  %35 = add <16 x i8> %33, %wide.load30.1
  %index.next.1 = add i64 %index.next, 32
  %36 = icmp eq i64 %index.next.1, %n.vec
  br i1 %36, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !92

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa45 = phi <16 x i8> [ %35, %vector.body ]
  %.lcssa44 = phi <16 x i8> [ %34, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa43 = phi <16 x i8> [ %.lcssa43.unr, %vector.ph.split ], [ %.lcssa45, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa44, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi35 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa43, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi35, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %rdx.shuf39 = shufflevector <16 x i8> %bin.rdx38, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx40 = add <16 x i8> %bin.rdx38, %rdx.shuf39
  %rdx.shuf41 = shufflevector <16 x i8> %bin.rdx40, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx42 = add <16 x i8> %bin.rdx40, %rdx.shuf41
  %37 = extractelement <16 x i8> %bin.rdx42, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %37, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %38 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %sub7.i = sub i8 %result.011.reg2mem.0, %sum24
  %add = add i8 %sub7.i, %38
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !93

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %37, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %39 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %39 to i8
  %sub7.i.i = sub i8 %conv.i, %sum24
  %mul.i = shl i8 %sub7.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh28custom_sub_multiple_variableIhEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh28custom_sub_multiple_variableIhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh28custom_sub_multiple_variableIhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %17, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh28custom_sub_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i16 = sub nsw i64 %call.i15, %42
  %conv.i17 = sitofp i64 %sub.i16 to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %44, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %48 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ih24custom_multiply_variableIhEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %mul.i.i = shl i8 %v1, 6
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat27 = shufflevector <16 x i8> %broadcast.splatinsert26, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh24custom_multiply_variableIhEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh24custom_multiply_variableIhEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh24custom_multiply_variableIhEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load25.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = mul <16 x i8> %wide.load.prol, %broadcast.splat27
  %17 = mul <16 x i8> %wide.load25.prol, %broadcast.splat27
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa38.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <16 x i8> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load25 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = mul <16 x i8> %wide.load, %broadcast.splat27
  %23 = mul <16 x i8> %wide.load25, %broadcast.splat27
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi24
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load25.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = mul <16 x i8> %wide.load.1, %broadcast.splat27
  %31 = mul <16 x i8> %wide.load25.1, %broadcast.splat27
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !94

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa40 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa39 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa38 = phi <16 x i8> [ %.lcssa38.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa38, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <16 x i8> %bin.rdx31, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <16 x i8> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <16 x i8> %bin.rdx33, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <16 x i8> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <16 x i8> %bin.rdx35, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx35, %rdx.shuf36
  %35 = extractelement <16 x i8> %bin.rdx37, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %mul.i = mul i8 %36, %v1
  %add = add i8 %mul.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !95

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %mul.i15 = mul i8 %mul.i.i, %conv.i
  %cmp.i.i = icmp eq i8 %mul.i15, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh24custom_multiply_variableIhEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh24custom_multiply_variableIhEEvT_S2_.exit

_Z26check_shifted_variable_sumIh24custom_multiply_variableIhEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh24custom_multiply_variableIhEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i16 = tail call i64 @clock() #5
  store i64 %call.i16, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i16, %40
  %conv.i17 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih33custom_multiply_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %mul.i.i = shl i8 %v1, 6
  %mul3.i.i = mul i8 %mul.i.i, %v2
  %mul5.i.i = mul i8 %mul3.i.i, %v3
  %mul7.i.i = mul i8 %mul5.i.i, %v4
  %mul.i = mul i8 %v2, %v1
  %mul3.i = mul i8 %mul.i, %v3
  %mul5.i = mul i8 %mul3.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <16 x i8> undef, i8 %mul5.i, i32 0
  %broadcast.splat27 = shufflevector <16 x i8> %broadcast.splatinsert26, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh33custom_multiply_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh33custom_multiply_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh33custom_multiply_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load25.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = mul <16 x i8> %broadcast.splat27, %wide.load.prol
  %17 = mul <16 x i8> %broadcast.splat27, %wide.load25.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa38.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <16 x i8> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load25 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = mul <16 x i8> %broadcast.splat27, %wide.load
  %23 = mul <16 x i8> %broadcast.splat27, %wide.load25
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi24
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load25.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = mul <16 x i8> %broadcast.splat27, %wide.load.1
  %31 = mul <16 x i8> %broadcast.splat27, %wide.load25.1
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !96

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa40 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa39 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa38 = phi <16 x i8> [ %.lcssa38.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa38, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <16 x i8> %bin.rdx31, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <16 x i8> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <16 x i8> %bin.rdx33, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <16 x i8> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <16 x i8> %bin.rdx35, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <16 x i8> %bin.rdx35, %rdx.shuf36
  %35 = extractelement <16 x i8> %bin.rdx37, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %mul7.i = mul i8 %mul5.i, %36
  %add = add i8 %mul7.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !97

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %mul.i15 = mul i8 %mul7.i.i, %conv.i
  %cmp.i.i = icmp eq i8 %mul.i15, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh33custom_multiply_multiple_variableIhEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh33custom_multiply_multiple_variableIhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh33custom_multiply_multiple_variableIhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh33custom_multiply_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i16 = tail call i64 @clock() #5
  store i64 %call.i16, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i16, %40
  %conv.i17 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih34custom_multiply_multiple_variable2IhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %mul.i.i = mul i8 %v2, %v1
  %mul4.i.i = mul i8 %mul.i.i, %v3
  %mul6.i.i = mul i8 %mul4.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <16 x i8> undef, i8 %mul6.i.i, i32 0
  %broadcast.splat28 = shufflevector <16 x i8> %broadcast.splatinsert27, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh34custom_multiply_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh34custom_multiply_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh34custom_multiply_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load26.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = add <16 x i8> %broadcast.splat28, %wide.load.prol
  %17 = add <16 x i8> %broadcast.splat28, %wide.load26.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa39.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <16 x i8> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load26 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = add <16 x i8> %vec.phi, %broadcast.splat28
  %23 = add <16 x i8> %vec.phi25, %broadcast.splat28
  %24 = add <16 x i8> %22, %wide.load
  %25 = add <16 x i8> %23, %wide.load26
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load26.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = add <16 x i8> %24, %broadcast.splat28
  %31 = add <16 x i8> %25, %broadcast.splat28
  %32 = add <16 x i8> %30, %wide.load.1
  %33 = add <16 x i8> %31, %wide.load26.1
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !98

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa40 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <16 x i8> [ %.lcssa39.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %35 = extractelement <16 x i8> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %add.i = add i8 %result.011.reg2mem.0, %mul6.i.i
  %add = add i8 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !99

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %add.i.i = add i8 %conv.i, %mul6.i.i
  %mul.i15 = shl i8 %add.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i15, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh34custom_multiply_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh34custom_multiply_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh34custom_multiply_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh34custom_multiply_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i16 = tail call i64 @clock() #5
  store i64 %call.i16, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i16, %40
  %conv.i17 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i18 = add nsw i32 %45, 10
  store i32 %add.i18, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i18 to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %42, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %46 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ih22custom_divide_variableIhEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i8, i8* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh22custom_divide_variableIhEEvT_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIh22custom_divide_variableIhEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh22custom_divide_variableIhEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i8, i8* %first, align 1, !tbaa !28
  %16 = load i8, i8* %12, align 1, !tbaa !28
  %17 = udiv i8 %15, %v1
  %18 = udiv i8 %16, %v1
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa26.unr = phi i8 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i8 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i8 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi23.unr = phi i8 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i8 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi23 = phi i8 [ %vec.phi23.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2225 = or i64 %index, 1
  %19 = getelementptr inbounds i8, i8* %first, i64 %index
  %20 = getelementptr inbounds i8, i8* %first, i64 %induction2225
  %21 = load i8, i8* %19, align 1, !tbaa !28
  %22 = load i8, i8* %20, align 1, !tbaa !28
  %23 = udiv i8 %21, %v1
  %24 = udiv i8 %22, %v1
  %25 = add i8 %23, %vec.phi
  %26 = add i8 %24, %vec.phi23
  %index.next = add i64 %index, 2
  %induction2225.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %28 = getelementptr inbounds i8, i8* %first, i64 %induction2225.1
  %29 = load i8, i8* %27, align 1, !tbaa !28
  %30 = load i8, i8* %28, align 1, !tbaa !28
  %31 = udiv i8 %29, %v1
  %32 = udiv i8 %30, %v1
  %33 = add i8 %31, %25
  %34 = add i8 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !100

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi i8 [ %34, %vector.body ]
  %.lcssa29 = phi i8 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa26 = phi i8 [ %.lcssa26.unr, %vector.body.preheader.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i8 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i8 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi24 = phi i8 [ 0, %overflow.checked ], [ %.lcssa26, %middle.block.loopexit ]
  %bin.rdx = add i8 %rdx.vec.exit.phi24, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter27 = and i32 %38, 3
  %lcmp.mod28 = icmp ne i32 %xtraiter27, 0
  br i1 %lcmp.mod28, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.011.reg2mem.0.prol = phi i8 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter27, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.prol
  %40 = load i8, i8* %arrayidx.prol, align 1, !tbaa !28
  %div3.i.prol = udiv i8 %40, %v1
  %add.prol = add i8 %div3.i.prol, %result.011.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !101

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i8 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i8 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.011.reg2mem.0.unr = phi i8 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.011.reg2mem.0 = phi i8 [ %result.011.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %42 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %div3.i = udiv i8 %42, %v1
  %add = add i8 %div3.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.next
  %43 = load i8, i8* %arrayidx.1, align 1, !tbaa !28
  %div3.i.1 = udiv i8 %43, %v1
  %add.1 = add i8 %div3.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.next.1
  %44 = load i8, i8* %arrayidx.2, align 1, !tbaa !28
  %div3.i.2 = udiv i8 %44, %v1
  %add.2 = add i8 %div3.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.next.2
  %45 = load i8, i8* %arrayidx.3, align 1, !tbaa !28
  %div3.i.3 = udiv i8 %45, %v1
  %add.3 = add i8 %div3.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !102

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i8 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i8 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %46 to i8
  %div3.i.i = udiv i8 %conv.i, %v1
  %mul.i = shl i8 %div3.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh22custom_divide_variableIhEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh22custom_divide_variableIhEEvT_S2_.exit

_Z26check_shifted_variable_sumIh22custom_divide_variableIhEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh22custom_divide_variableIhEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %49
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %51, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %55 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih31custom_divide_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh31custom_divide_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  %5 = phi i32 [ %31, %_Z26check_shifted_variable_sumIh31custom_divide_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh31custom_divide_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi = phi i8 [ %18, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi24 = phi i8 [ %19, %vector.body ], [ 0, %vector.body.preheader ]
  %induction2326 = or i64 %index, 1
  %6 = getelementptr inbounds i8, i8* %first, i64 %index
  %7 = getelementptr inbounds i8, i8* %first, i64 %induction2326
  %8 = load i8, i8* %6, align 1, !tbaa !28
  %9 = load i8, i8* %7, align 1, !tbaa !28
  %10 = udiv i8 %8, %v1
  %11 = udiv i8 %9, %v1
  %12 = udiv i8 %10, %v2
  %13 = udiv i8 %11, %v2
  %14 = udiv i8 %12, %v3
  %15 = udiv i8 %13, %v3
  %16 = udiv i8 %14, %v4
  %17 = udiv i8 %15, %v4
  %18 = add i8 %16, %vec.phi
  %19 = add i8 %17, %vec.phi24
  %index.next = add i64 %index, 2
  %20 = icmp eq i64 %index.next, %n.vec
  br i1 %20, label %middle.block.loopexit, label %vector.body, !llvm.loop !103

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa28 = phi i8 [ %19, %vector.body ]
  %.lcssa = phi i8 [ %18, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i8 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi25 = phi i8 [ 0, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add i8 %rdx.vec.exit.phi25, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %21 = add i64 %resume.val, 1
  %22 = trunc i64 %21 to i32
  %23 = sub i32 %4, %22
  %24 = sub i32 %count, %22
  %xtraiter = and i32 %23, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %arrayidx.prol = getelementptr inbounds i8, i8* %first, i64 %resume.val
  %25 = load i8, i8* %arrayidx.prol, align 1, !tbaa !28
  %div9.i.prol = udiv i8 %25, %v1
  %div10.i.prol = udiv i8 %div9.i.prol, %v2
  %div.i.prol = udiv i8 %div10.i.prol, %v3
  %div11.i.prol = udiv i8 %div.i.prol, %v4
  %add.prol = add i8 %div11.i.prol, %bin.rdx
  %indvars.iv.next.prol = add nuw nsw i64 %resume.val, 1
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi i8 [ 0, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol, %for.body3.prol ]
  %result.011.reg2mem.0.unr = phi i8 [ %bin.rdx, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %26 = icmp ult i32 %24, 1
  br i1 %26, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.011.reg2mem.0 = phi i8 [ %result.011.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %27 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %div9.i = udiv i8 %27, %v1
  %div10.i = udiv i8 %div9.i, %v2
  %div.i = udiv i8 %div10.i, %v3
  %div11.i = udiv i8 %div.i, %v4
  %add = add i8 %div11.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i8, i8* %first, i64 %indvars.iv.next
  %28 = load i8, i8* %arrayidx.1, align 1, !tbaa !28
  %div9.i.1 = udiv i8 %28, %v1
  %div10.i.1 = udiv i8 %div9.i.1, %v2
  %div.i.1 = udiv i8 %div10.i.1, %v3
  %div11.i.1 = udiv i8 %div.i.1, %v4
  %add.1 = add i8 %div11.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !104

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi i8 [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i8 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %29 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %29 to i8
  %div9.i.i = udiv i8 %conv.i, %v1
  %div10.i.i = udiv i8 %div9.i.i, %v2
  %div.i.i = udiv i8 %div10.i.i, %v3
  %div11.i.i = udiv i8 %div.i.i, %v4
  %mul.i = shl i8 %div11.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh31custom_divide_multiple_variableIhEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %30 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %30) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh31custom_divide_multiple_variableIhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh31custom_divide_multiple_variableIhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %31 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %31
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh31custom_divide_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %32 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %32
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i17 = fdiv double %conv.i16, 1.000000e+06
  %33 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %33, null
  %34 = bitcast %struct.one_result* %33 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %35 = load i32, i32* @current_test, align 4, !tbaa !5
  %36 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %35, %36
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %37 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %36, %lor.lhs.false.i ]
  %add.i = add nsw i32 %37, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %34, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %38 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %39 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %39) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %40 = phi %struct.one_result* [ %38, %if.then.if.end5_crit_edge.i ], [ %33, %lor.lhs.false.i ]
  %41 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %35, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %41 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 0
  store double %div.i17, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %41, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih32custom_divide_multiple_variable2IhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %div8.i.i = udiv i8 %v1, %v2
  %div9.i.i = udiv i8 %div8.i.i, %v3
  %div.i.i = udiv i8 %div9.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <16 x i8> undef, i8 %div.i.i, i32 0
  %broadcast.splat28 = shufflevector <16 x i8> %broadcast.splatinsert27, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh32custom_divide_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh32custom_divide_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh32custom_divide_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load26.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = add <16 x i8> %wide.load.prol, %broadcast.splat28
  %17 = add <16 x i8> %wide.load26.prol, %broadcast.splat28
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa39.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <16 x i8> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load26 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = add <16 x i8> %wide.load, %vec.phi
  %23 = add <16 x i8> %wide.load26, %vec.phi25
  %24 = add <16 x i8> %22, %broadcast.splat28
  %25 = add <16 x i8> %23, %broadcast.splat28
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load26.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = add <16 x i8> %wide.load.1, %24
  %31 = add <16 x i8> %wide.load26.1, %25
  %32 = add <16 x i8> %30, %broadcast.splat28
  %33 = add <16 x i8> %31, %broadcast.splat28
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !105

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa40 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <16 x i8> [ %.lcssa39.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <16 x i8> %bin.rdx36, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <16 x i8> %bin.rdx36, %rdx.shuf37
  %35 = extractelement <16 x i8> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %add.i = add i8 %36, %result.011.reg2mem.0
  %add = add i8 %add.i, %div.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !106

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %add.i.i = add i8 %div.i.i, %conv.i
  %mul.i = shl i8 %add.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh32custom_divide_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh32custom_divide_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh32custom_divide_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh32custom_divide_multiple_variable2IhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i17 = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i18 = add nsw i32 %45, 10
  store i32 %add.i18, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i18 to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %42, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %46 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i17, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih30custom_mixed_multiple_variableIhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %conv1.i.i = zext i8 %v1 to i32
  %conv2.i.i = zext i8 %v2 to i32
  %conv3.i.i = zext i8 %v3 to i32
  %mul.i.i = mul nuw nsw i32 %conv3.i.i, %conv2.i.i
  %conv4.i.i = zext i8 %v4 to i32
  %div.i.i = udiv i32 %mul.i.i, %conv4.i.i
  %add.i.i = sub nsw i32 %conv1.i.i, %div.i.i
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert30 = insertelement <4 x i32> undef, i32 %conv1.i.i, i32 0
  %broadcast.splat31 = shufflevector <4 x i32> %broadcast.splatinsert30, <4 x i32> undef, <4 x i32> zeroinitializer
  %broadcast.splatinsert32 = insertelement <4 x i32> undef, i32 %div.i.i, i32 0
  %broadcast.splat33 = shufflevector <4 x i32> %broadcast.splatinsert32, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh30custom_mixed_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  %4 = phi i32 [ %24, %_Z26check_shifted_variable_sumIh30custom_mixed_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh30custom_mixed_multiple_variableIhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body ]
  %vec.phi28 = phi <4 x i8> [ zeroinitializer, %vector.ph ], [ %18, %vector.body ]
  %5 = getelementptr inbounds i8, i8* %first, i64 %index
  %6 = bitcast i8* %5 to <4 x i8>*
  %wide.load = load <4 x i8>, <4 x i8>* %6, align 1, !tbaa !28
  %7 = getelementptr i8, i8* %5, i64 4
  %8 = bitcast i8* %7 to <4 x i8>*
  %wide.load29 = load <4 x i8>, <4 x i8>* %8, align 1, !tbaa !28
  %9 = zext <4 x i8> %wide.load to <4 x i32>
  %10 = zext <4 x i8> %wide.load29 to <4 x i32>
  %11 = add nuw nsw <4 x i32> %9, %broadcast.splat31
  %12 = add nuw nsw <4 x i32> %10, %broadcast.splat31
  %13 = sub nsw <4 x i32> %11, %broadcast.splat33
  %14 = sub nsw <4 x i32> %12, %broadcast.splat33
  %15 = trunc <4 x i32> %13 to <4 x i8>
  %16 = trunc <4 x i32> %14 to <4 x i8>
  %17 = add <4 x i8> %15, %vec.phi
  %18 = add <4 x i8> %16, %vec.phi28
  %index.next = add i64 %index, 8
  %19 = icmp eq i64 %index.next, %n.vec
  br i1 %19, label %middle.block.loopexit, label %vector.body, !llvm.loop !107

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa41 = phi <4 x i8> [ %18, %vector.body ]
  %.lcssa = phi <4 x i8> [ %17, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi36 = phi <4 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa41, %middle.block.loopexit ]
  %bin.rdx = add <4 x i8> %rdx.vec.exit.phi36, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i8> %bin.rdx, <4 x i8> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx37 = add <4 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf38 = shufflevector <4 x i8> %bin.rdx37, <4 x i8> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx39 = add <4 x i8> %bin.rdx37, %rdx.shuf38
  %20 = extractelement <4 x i8> %bin.rdx39, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %20, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %21 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %conv.i = zext i8 %21 to i32
  %add.i = add nuw nsw i32 %conv.i, %conv1.i.i
  %sub.i = sub nsw i32 %add.i, %div.i.i
  %conv5.i = trunc i32 %sub.i to i8
  %add = add i8 %conv5.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !108

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %20, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %22 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i19 = fptoui double %22 to i8
  %conv.i.i = zext i8 %conv.i19 to i32
  %sub.i.i = add nsw i32 %add.i.i, %conv.i.i
  %conv5.i.i = trunc i32 %sub.i.i to i8
  %mul.i20 = shl i8 %conv5.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i20, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh30custom_mixed_multiple_variableIhEEvT_S2_S2_S2_S2_.exit, label %if.then.i22

if.then.i22:                                      ; preds = %for.end
  %23 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %23) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh30custom_mixed_multiple_variableIhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh30custom_mixed_multiple_variableIhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i22
  %24 = phi i32 [ %4, %for.end ], [ %.pre, %if.then.i22 ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %24
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh30custom_mixed_multiple_variableIhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i23 = tail call i64 @clock() #5
  store i64 %call.i23, i64* @end_time, align 8, !tbaa !11
  %25 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i24 = sub nsw i64 %call.i23, %25
  %conv.i25 = sitofp i64 %sub.i24 to double
  %div.i26 = fdiv double %conv.i25, 1.000000e+06
  %26 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %26, null
  %27 = bitcast %struct.one_result* %26 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i

lor.lhs.false.i:                                  ; preds = %for.end8
  %28 = load i32, i32* @current_test, align 4, !tbaa !5
  %29 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %28, %29
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i

if.then.i:                                        ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %30 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %29, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %30, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %27, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i
  %31 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i
  %32 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %32) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %33 = phi %struct.one_result* [ %31, %if.then.if.end5_crit_edge.i ], [ %26, %lor.lhs.false.i ]
  %34 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %28, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %34 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %33, i64 %idxprom.i, i32 0
  store double %div.i26, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %33, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %34, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ih19custom_variable_andIhEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat26 = shufflevector <16 x i8> %broadcast.splatinsert25, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh19custom_variable_andIhEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh19custom_variable_andIhEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh19custom_variable_andIhEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load24.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = and <16 x i8> %wide.load.prol, %broadcast.splat26
  %17 = and <16 x i8> %wide.load24.prol, %broadcast.splat26
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <16 x i8> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load24 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = and <16 x i8> %wide.load, %broadcast.splat26
  %23 = and <16 x i8> %wide.load24, %broadcast.splat26
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi23
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load24.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = and <16 x i8> %wide.load.1, %broadcast.splat26
  %31 = and <16 x i8> %wide.load24.1, %broadcast.splat26
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !109

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa38 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <16 x i8> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <16 x i8> %bin.rdx30, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <16 x i8> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %and3.i = and i8 %36, %v1
  %add = add i8 %and3.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !110

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %and3.i.i = and i8 %conv.i, %v1
  %mul.i = shl i8 %and3.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh19custom_variable_andIhEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh19custom_variable_andIhEEvT_S2_.exit

_Z26check_shifted_variable_sumIh19custom_variable_andIhEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh19custom_variable_andIhEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih28custom_multiple_variable_andIhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %and9.i.i = and i8 %v2, %v1
  %and310.i.i = and i8 %and9.i.i, %v3
  %and511.i.i = and i8 %and310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <16 x i8> undef, i8 %and511.i.i, i32 0
  %broadcast.splat26 = shufflevector <16 x i8> %broadcast.splatinsert25, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh28custom_multiple_variable_andIhEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh28custom_multiple_variable_andIhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh28custom_multiple_variable_andIhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load24.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = and <16 x i8> %broadcast.splat26, %wide.load.prol
  %17 = and <16 x i8> %broadcast.splat26, %wide.load24.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <16 x i8> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load24 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = and <16 x i8> %broadcast.splat26, %wide.load
  %23 = and <16 x i8> %broadcast.splat26, %wide.load24
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi23
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load24.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = and <16 x i8> %broadcast.splat26, %wide.load.1
  %31 = and <16 x i8> %broadcast.splat26, %wide.load24.1
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !111

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa38 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <16 x i8> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <16 x i8> %bin.rdx30, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <16 x i8> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %and712.i = and i8 %and511.i.i, %36
  %add = add i8 %and712.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !112

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %and712.i.i = and i8 %and511.i.i, %conv.i
  %mul.i = shl i8 %and712.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh28custom_multiple_variable_andIhEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh28custom_multiple_variable_andIhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh28custom_multiple_variable_andIhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh28custom_multiple_variable_andIhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ih18custom_variable_orIhEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat26 = shufflevector <16 x i8> %broadcast.splatinsert25, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh18custom_variable_orIhEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh18custom_variable_orIhEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh18custom_variable_orIhEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load24.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = or <16 x i8> %wide.load.prol, %broadcast.splat26
  %17 = or <16 x i8> %wide.load24.prol, %broadcast.splat26
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <16 x i8> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load24 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = or <16 x i8> %wide.load, %broadcast.splat26
  %23 = or <16 x i8> %wide.load24, %broadcast.splat26
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi23
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load24.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = or <16 x i8> %wide.load.1, %broadcast.splat26
  %31 = or <16 x i8> %wide.load24.1, %broadcast.splat26
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !113

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa38 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <16 x i8> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <16 x i8> %bin.rdx30, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <16 x i8> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %or3.i = or i8 %36, %v1
  %add = add i8 %or3.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !114

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %or3.i.i = or i8 %conv.i, %v1
  %mul.i = shl i8 %or3.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh18custom_variable_orIhEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh18custom_variable_orIhEEvT_S2_.exit

_Z26check_shifted_variable_sumIh18custom_variable_orIhEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh18custom_variable_orIhEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih27custom_multiple_variable_orIhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %or9.i.i = or i8 %v2, %v1
  %or310.i.i = or i8 %or9.i.i, %v3
  %or511.i.i = or i8 %or310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <16 x i8> undef, i8 %or511.i.i, i32 0
  %broadcast.splat26 = shufflevector <16 x i8> %broadcast.splatinsert25, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh27custom_multiple_variable_orIhEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh27custom_multiple_variable_orIhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh27custom_multiple_variable_orIhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load24.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = or <16 x i8> %broadcast.splat26, %wide.load.prol
  %17 = or <16 x i8> %broadcast.splat26, %wide.load24.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <16 x i8> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load24 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = or <16 x i8> %broadcast.splat26, %wide.load
  %23 = or <16 x i8> %broadcast.splat26, %wide.load24
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi23
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load24.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = or <16 x i8> %broadcast.splat26, %wide.load.1
  %31 = or <16 x i8> %broadcast.splat26, %wide.load24.1
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !115

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa38 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <16 x i8> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <16 x i8> %bin.rdx30, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <16 x i8> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %or712.i = or i8 %or511.i.i, %36
  %add = add i8 %or712.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !116

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %or712.i.i = or i8 %or511.i.i, %conv.i
  %mul.i = shl i8 %or712.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh27custom_multiple_variable_orIhEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh27custom_multiple_variable_orIhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh27custom_multiple_variable_orIhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh27custom_multiple_variable_orIhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ih19custom_variable_xorIhEEvPT_iS2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <16 x i8> undef, i8 %v1, i32 0
  %broadcast.splat26 = shufflevector <16 x i8> %broadcast.splatinsert25, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh19custom_variable_xorIhEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh19custom_variable_xorIhEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh19custom_variable_xorIhEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load24.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = xor <16 x i8> %wide.load.prol, %broadcast.splat26
  %17 = xor <16 x i8> %wide.load24.prol, %broadcast.splat26
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <16 x i8> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load24 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = xor <16 x i8> %wide.load, %broadcast.splat26
  %23 = xor <16 x i8> %wide.load24, %broadcast.splat26
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi23
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load24.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = xor <16 x i8> %wide.load.1, %broadcast.splat26
  %31 = xor <16 x i8> %wide.load24.1, %broadcast.splat26
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !117

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa38 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <16 x i8> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <16 x i8> %bin.rdx30, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <16 x i8> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %xor3.i = xor i8 %36, %v1
  %add = add i8 %xor3.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !118

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %xor3.i.i = xor i8 %conv.i, %v1
  %mul.i = shl i8 %xor3.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh19custom_variable_xorIhEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh19custom_variable_xorIhEEvT_S2_.exit

_Z26check_shifted_variable_sumIh19custom_variable_xorIhEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh19custom_variable_xorIhEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ih28custom_multiple_variable_xorIhEEvPT_iS2_S2_S2_S2_PKc(i8* nocapture readonly %first, i32 %count, i8 zeroext %v1, i8 zeroext %v2, i8 zeroext %v3, i8 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %xor9.i.i = xor i8 %v2, %v1
  %xor310.i.i = xor i8 %xor9.i.i, %v3
  %xor511.i.i = xor i8 %xor310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 5
  %7 = mul i64 %6, 32
  %8 = add i64 %7, -32
  %9 = lshr i64 %8, 5
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934560
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <16 x i8> undef, i8 %xor511.i.i, i32 0
  %broadcast.splat26 = shufflevector <16 x i8> %broadcast.splatinsert25, <16 x i8> undef, <16 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i8* %first to <16 x i8>*
  %12 = getelementptr i8, i8* %first, i64 16
  %13 = bitcast i8* %12 to <16 x i8>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIh28custom_multiple_variable_xorIhEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIh28custom_multiple_variable_xorIhEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIh28custom_multiple_variable_xorIhEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <16 x i8>, <16 x i8>* %11, align 1, !tbaa !28
  %wide.load24.prol = load <16 x i8>, <16 x i8>* %13, align 1, !tbaa !28
  %16 = xor <16 x i8> %broadcast.splat26, %wide.load.prol
  %17 = xor <16 x i8> %broadcast.splat26, %wide.load24.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 32, %vector.body.prol ]
  %vec.phi.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <16 x i8> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <16 x i8> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <16 x i8> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i8, i8* %first, i64 %index
  %19 = bitcast i8* %18 to <16 x i8>*
  %wide.load = load <16 x i8>, <16 x i8>* %19, align 1, !tbaa !28
  %20 = getelementptr i8, i8* %18, i64 16
  %21 = bitcast i8* %20 to <16 x i8>*
  %wide.load24 = load <16 x i8>, <16 x i8>* %21, align 1, !tbaa !28
  %22 = xor <16 x i8> %broadcast.splat26, %wide.load
  %23 = xor <16 x i8> %broadcast.splat26, %wide.load24
  %24 = add <16 x i8> %22, %vec.phi
  %25 = add <16 x i8> %23, %vec.phi23
  %index.next = add i64 %index, 32
  %26 = getelementptr inbounds i8, i8* %first, i64 %index.next
  %27 = bitcast i8* %26 to <16 x i8>*
  %wide.load.1 = load <16 x i8>, <16 x i8>* %27, align 1, !tbaa !28
  %28 = getelementptr i8, i8* %26, i64 16
  %29 = bitcast i8* %28 to <16 x i8>*
  %wide.load24.1 = load <16 x i8>, <16 x i8>* %29, align 1, !tbaa !28
  %30 = xor <16 x i8> %broadcast.splat26, %wide.load.1
  %31 = xor <16 x i8> %broadcast.splat26, %wide.load24.1
  %32 = add <16 x i8> %30, %24
  %33 = add <16 x i8> %31, %25
  %index.next.1 = add i64 %index.next, 32
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !119

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <16 x i8> [ %33, %vector.body ]
  %.lcssa38 = phi <16 x i8> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <16 x i8> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <16 x i8> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <16 x i8> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <16 x i8> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <16 x i8> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <16 x i8> %bin.rdx30, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <16 x i8> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <16 x i8> %bin.rdx32, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <16 x i8> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <16 x i8> %bin.rdx34, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <16 x i8> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <16 x i8> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i8 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i8, i8* %first, i64 %indvars.iv
  %36 = load i8, i8* %arrayidx, align 1, !tbaa !28
  %xor712.i = xor i8 %xor511.i.i, %36
  %add = add i8 %xor712.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !120

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i8 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i8 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i8
  %xor712.i.i = xor i8 %xor511.i.i, %conv.i
  %mul.i = shl i8 %xor712.i.i, 6
  %cmp.i.i = icmp eq i8 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIh28custom_multiple_variable_xorIhEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIh28custom_multiple_variable_xorIhEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIh28custom_multiple_variable_xorIhEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIh28custom_multiple_variable_xorIhEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Is19custom_add_variableIsEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat29 = shufflevector <8 x i16> %broadcast.splatinsert28, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load27.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = add <8 x i16> %broadcast.splat29, %wide.load.prol
  %17 = add <8 x i16> %broadcast.splat29, %wide.load27.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa38.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi26.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi26 = phi <8 x i16> [ %vec.phi26.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load27 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = add <8 x i16> %vec.phi, %broadcast.splat29
  %23 = add <8 x i16> %vec.phi26, %broadcast.splat29
  %24 = add <8 x i16> %22, %wide.load
  %25 = add <8 x i16> %23, %wide.load27
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load27.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = add <8 x i16> %24, %broadcast.splat29
  %31 = add <8 x i16> %25, %broadcast.splat29
  %32 = add <8 x i16> %30, %wide.load.1
  %33 = add <8 x i16> %31, %wide.load27.1
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !121

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa40 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa39 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa38 = phi <8 x i16> [ %.lcssa38.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa38, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <8 x i16> %bin.rdx33, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <8 x i16> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <8 x i16> %bin.rdx35, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <8 x i16> %bin.rdx35, %rdx.shuf36
  %35 = extractelement <8 x i16> %bin.rdx37, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %add.i = add i16 %result.013.reg2mem.0, %v1
  %add = add i16 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !122

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %add.i.i = add i16 %conv.i, %v1
  %38 = mul i16 %add.i.i, -8000
  %sub.i6.i24 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i24 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i24, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit

_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i19 = add nsw i32 %47, 10
  store i32 %add.i19, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i19 to i64
  %mul.i = shl nsw i64 %conv.i20, 4
  %call.i21 = tail call i8* @realloc(i8* %44, i64 %mul.i) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %48 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1Is19custom_add_variableIsEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp19 = icmp sgt i32 %0, 0
  br i1 %cmp19, label %for.cond1.preheader.preheader, label %for.end12

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp216 = icmp sgt i32 %count, 0
  %conv6 = sext i16 %v1 to i32
  %mul = mul nsw i32 %conv6, %count
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = sext i32 %count to i64
  %4 = lshr i64 %3, 4
  %5 = mul i64 %4, 16
  %6 = add i64 %5, -16
  %7 = lshr i64 %6, 4
  %8 = add i64 %7, 1
  %backedge.overflow = icmp eq i32 %count, 0
  %n.vec = and i64 %2, -16
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %8, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %9 = icmp ult i64 %7, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit
  %10 = phi i32 [ %47, %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.020 = phi i32 [ %inc11, %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp216, label %polly.stmt.for.inc.preheader, label %for.end

polly.stmt.for.inc.preheader:                     ; preds = %for.cond1.preheader
  br i1 %backedge.overflow, label %polly.stmt.for.inc.preheader39, label %overflow.checked

polly.stmt.for.inc.preheader39:                   ; preds = %middle.block, %polly.stmt.for.inc.preheader
  %result.017.reg2mem.0.ph = phi i16 [ 0, %polly.stmt.for.inc.preheader ], [ %42, %middle.block ]
  %polly.indvar.ph = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %resume.val, %middle.block ]
  br label %polly.stmt.for.inc

overflow.checked:                                 ; preds = %polly.stmt.for.inc.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.preheader.split

vector.body.prol.preheader:                       ; preds = %vector.body.preheader
  br label %vector.body.prol

vector.body.prol:                                 ; preds = %vector.body.prol.preheader, %vector.body.prol
  %index.prol = phi i64 [ %index.next.prol, %vector.body.prol ], [ 0, %vector.body.prol.preheader ]
  %vec.phi.prol = phi <8 x i16> [ %15, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %vec.phi28.prol = phi <8 x i16> [ %16, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %vector.body.prol ], [ %xtraiter, %vector.body.prol.preheader ]
  %11 = getelementptr i16, i16* %first, i64 %index.prol
  %12 = bitcast i16* %11 to <8 x i16>*
  %wide.load.prol = load <8 x i16>, <8 x i16>* %12, align 2, !alias.scope !123, !noalias !125
  %13 = getelementptr i16, i16* %11, i64 8
  %14 = bitcast i16* %13 to <8 x i16>*
  %wide.load30.prol = load <8 x i16>, <8 x i16>* %14, align 2, !alias.scope !123, !noalias !125
  %15 = add <8 x i16> %wide.load.prol, %vec.phi.prol
  %16 = add <8 x i16> %wide.load30.prol, %vec.phi28.prol
  %index.next.prol = add i64 %index.prol, 16
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %vector.body.prol, label %vector.body.preheader.split.loopexit, !llvm.loop !130

vector.body.preheader.split.loopexit:             ; preds = %vector.body.prol
  %index.next.prol.lcssa = phi i64 [ %index.next.prol, %vector.body.prol ]
  %.lcssa44 = phi <8 x i16> [ %16, %vector.body.prol ]
  %.lcssa43 = phi <8 x i16> [ %15, %vector.body.prol ]
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.preheader.split.loopexit, %vector.body.preheader
  %.lcssa40.unr = phi <8 x i16> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa44, %vector.body.preheader.split.loopexit ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa43, %vector.body.preheader.split.loopexit ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ %index.next.prol.lcssa, %vector.body.preheader.split.loopexit ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa43, %vector.body.preheader.split.loopexit ]
  %vec.phi28.unr = phi <8 x i16> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa44, %vector.body.preheader.split.loopexit ]
  br i1 %9, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.3, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %39, %vector.body ]
  %vec.phi28 = phi <8 x i16> [ %vec.phi28.unr, %vector.body.preheader.split.split ], [ %40, %vector.body ]
  %17 = getelementptr i16, i16* %first, i64 %index
  %18 = bitcast i16* %17 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %18, align 2, !alias.scope !123, !noalias !125
  %19 = getelementptr i16, i16* %17, i64 8
  %20 = bitcast i16* %19 to <8 x i16>*
  %wide.load30 = load <8 x i16>, <8 x i16>* %20, align 2, !alias.scope !123, !noalias !125
  %21 = add <8 x i16> %wide.load, %vec.phi
  %22 = add <8 x i16> %wide.load30, %vec.phi28
  %index.next = add i64 %index, 16
  %23 = getelementptr i16, i16* %first, i64 %index.next
  %24 = bitcast i16* %23 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %24, align 2, !alias.scope !123, !noalias !125
  %25 = getelementptr i16, i16* %23, i64 8
  %26 = bitcast i16* %25 to <8 x i16>*
  %wide.load30.1 = load <8 x i16>, <8 x i16>* %26, align 2, !alias.scope !123, !noalias !125
  %27 = add <8 x i16> %wide.load.1, %21
  %28 = add <8 x i16> %wide.load30.1, %22
  %index.next.1 = add i64 %index.next, 16
  %29 = getelementptr i16, i16* %first, i64 %index.next.1
  %30 = bitcast i16* %29 to <8 x i16>*
  %wide.load.2 = load <8 x i16>, <8 x i16>* %30, align 2, !alias.scope !123, !noalias !125
  %31 = getelementptr i16, i16* %29, i64 8
  %32 = bitcast i16* %31 to <8 x i16>*
  %wide.load30.2 = load <8 x i16>, <8 x i16>* %32, align 2, !alias.scope !123, !noalias !125
  %33 = add <8 x i16> %wide.load.2, %27
  %34 = add <8 x i16> %wide.load30.2, %28
  %index.next.2 = add i64 %index.next.1, 16
  %35 = getelementptr i16, i16* %first, i64 %index.next.2
  %36 = bitcast i16* %35 to <8 x i16>*
  %wide.load.3 = load <8 x i16>, <8 x i16>* %36, align 2, !alias.scope !123, !noalias !125
  %37 = getelementptr i16, i16* %35, i64 8
  %38 = bitcast i16* %37 to <8 x i16>*
  %wide.load30.3 = load <8 x i16>, <8 x i16>* %38, align 2, !alias.scope !123, !noalias !125
  %39 = add <8 x i16> %wide.load.3, %33
  %40 = add <8 x i16> %wide.load30.3, %34
  %index.next.3 = add i64 %index.next.2, 16
  %41 = icmp eq i64 %index.next.3, %n.vec
  br i1 %41, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !131

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa42 = phi <8 x i16> [ %40, %vector.body ]
  %.lcssa41 = phi <8 x i16> [ %39, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa40 = phi <8 x i16> [ %.lcssa40.unr, %vector.body.preheader.split ], [ %.lcssa42, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi33 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa40, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi33, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <8 x i16> %bin.rdx36, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <8 x i16> %bin.rdx36, %rdx.shuf37
  %42 = extractelement <8 x i16> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %2, %resume.val
  br i1 %cmp.n, label %for.end, label %polly.stmt.for.inc.preheader39

for.end.loopexit:                                 ; preds = %polly.stmt.for.inc
  %p_add.lcssa = phi i16 [ %p_add, %polly.stmt.for.inc ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %42, %middle.block ], [ %p_add.lcssa, %for.end.loopexit ]
  %conv713 = zext i16 %result.0.lcssa.reg2mem.0 to i32
  %add8 = add i32 %conv713, %mul
  %conv9 = trunc i32 %add8 to i16
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %43 to i16
  %add.i.i = add i16 %conv.i, %v1
  %44 = mul i16 %add.i.i, -8000
  %sub.i6.i27 = add i16 %conv9, %44
  %conv3.i.i = sext i16 %sub.i6.i27 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i27, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %45 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %45, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %46 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %46) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit

_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %47 = phi i32 [ %10, %for.end ], [ %.pre, %if.then.i ]
  %inc11 = add nuw nsw i32 %i.020, 1
  %cmp = icmp slt i32 %inc11, %47
  br i1 %cmp, label %for.cond1.preheader, label %for.end12.loopexit

for.end12.loopexit:                               ; preds = %_Z26check_shifted_variable_sumIs19custom_add_variableIsEEvT_S2_.exit
  br label %for.end12

for.end12:                                        ; preds = %for.end12.loopexit, %entry
  %call.i21 = tail call i64 @clock() #5
  store i64 %call.i21, i64* @end_time, align 8, !tbaa !11
  %48 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i21, %48
  %conv.i22 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i22, 1.000000e+06
  %49 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %49, null
  %50 = bitcast %struct.one_result* %49 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end12
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i25

lor.lhs.false.i:                                  ; preds = %for.end12
  %51 = load i32, i32* @current_test, align 4, !tbaa !5
  %52 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %51, %52
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i25

if.then.i25:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %53 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %add.i = add nsw i32 %53, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i23 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i23, 4
  %call.i24 = tail call i8* @realloc(i8* %50, i64 %mul.i) #5
  store i8* %call.i24, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i24, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i25
  %54 = bitcast i8* %call.i24 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i25
  %55 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i26 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %55) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %56 = phi %struct.one_result* [ %54, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %57 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %51, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %57 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %56, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %56, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %57, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void

polly.stmt.for.inc:                               ; preds = %polly.stmt.for.inc.preheader39, %polly.stmt.for.inc
  %result.017.reg2mem.0 = phi i16 [ %p_add, %polly.stmt.for.inc ], [ %result.017.reg2mem.0.ph, %polly.stmt.for.inc.preheader39 ]
  %polly.indvar = phi i64 [ %polly.indvar_next, %polly.stmt.for.inc ], [ %polly.indvar.ph, %polly.stmt.for.inc.preheader39 ]
  %scevgep = getelementptr i16, i16* %first, i64 %polly.indvar
  %_p_scalar_ = load i16, i16* %scevgep, align 2, !alias.scope !123, !noalias !125
  %p_add = add i16 %_p_scalar_, %result.017.reg2mem.0
  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
  %exitcond = icmp eq i64 %polly.indvar_next, %1
  br i1 %exitcond, label %for.end.loopexit, label %polly.stmt.for.inc, !llvm.loop !132
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is28custom_add_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %add.i.i = add i16 %v2, %v1
  %add3.i.i = add i16 %add.i.i, %v3
  %add5.i.i = add i16 %add3.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <8 x i16> undef, i16 %add5.i.i, i32 0
  %broadcast.splat29 = shufflevector <8 x i16> %broadcast.splatinsert28, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs28custom_add_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs28custom_add_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs28custom_add_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load27.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = add <8 x i16> %broadcast.splat29, %wide.load.prol
  %17 = add <8 x i16> %broadcast.splat29, %wide.load27.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa38.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi26.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi26 = phi <8 x i16> [ %vec.phi26.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load27 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = add <8 x i16> %broadcast.splat29, %vec.phi
  %23 = add <8 x i16> %broadcast.splat29, %vec.phi26
  %24 = add <8 x i16> %22, %wide.load
  %25 = add <8 x i16> %23, %wide.load27
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load27.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = add <8 x i16> %broadcast.splat29, %24
  %31 = add <8 x i16> %broadcast.splat29, %25
  %32 = add <8 x i16> %30, %wide.load.1
  %33 = add <8 x i16> %31, %wide.load27.1
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !133

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa40 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa39 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa38 = phi <8 x i16> [ %.lcssa38.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa38, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <8 x i16> %bin.rdx33, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <8 x i16> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <8 x i16> %bin.rdx35, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <8 x i16> %bin.rdx35, %rdx.shuf36
  %35 = extractelement <8 x i16> %bin.rdx37, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %add7.i = add i16 %add5.i.i, %result.013.reg2mem.0
  %add = add i16 %add7.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !134

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %add7.i.i = add i16 %add5.i.i, %conv.i
  %38 = mul i16 %add7.i.i, -8000
  %sub.i6.i24 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i24 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i24, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs28custom_add_multiple_variableIsEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs28custom_add_multiple_variableIsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs28custom_add_multiple_variableIsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs28custom_add_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i19 = add nsw i32 %47, 10
  store i32 %add.i19, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i19 to i64
  %mul.i = shl nsw i64 %conv.i20, 4
  %call.i21 = tail call i8* @realloc(i8* %44, i64 %mul.i) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %48 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Is19custom_sub_variableIsEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat29 = shufflevector <8 x i16> %broadcast.splatinsert28, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs19custom_sub_variableIsEEvT_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs19custom_sub_variableIsEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs19custom_sub_variableIsEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load27.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = sub <8 x i16> %wide.load.prol, %broadcast.splat29
  %17 = sub <8 x i16> %wide.load27.prol, %broadcast.splat29
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa38.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi26.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi26 = phi <8 x i16> [ %vec.phi26.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load27 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = sub <8 x i16> %wide.load, %broadcast.splat29
  %23 = sub <8 x i16> %wide.load27, %broadcast.splat29
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi26
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load27.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = sub <8 x i16> %wide.load.1, %broadcast.splat29
  %31 = sub <8 x i16> %wide.load27.1, %broadcast.splat29
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !135

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa40 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa39 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa38 = phi <8 x i16> [ %.lcssa38.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa38, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <8 x i16> %bin.rdx33, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <8 x i16> %bin.rdx33, %rdx.shuf34
  %rdx.shuf36 = shufflevector <8 x i16> %bin.rdx35, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx37 = add <8 x i16> %bin.rdx35, %rdx.shuf36
  %35 = extractelement <8 x i16> %bin.rdx37, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %sub.i = sub i16 %36, %v1
  %add = add i16 %sub.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !136

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %sub.i.i = sub i16 %conv.i, %v1
  %38 = mul i16 %sub.i.i, -8000
  %sub.i57.i24 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i57.i24 to i32
  %ispos.i.i = icmp sgt i16 %sub.i57.i24, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs19custom_sub_variableIsEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs19custom_sub_variableIsEEvT_S2_.exit

_Z26check_shifted_variable_sumIs19custom_sub_variableIsEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs19custom_sub_variableIsEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i18 = sub nsw i64 %call.i17, %42
  %conv.i19 = sitofp i64 %sub.i18 to double
  %div.i = fdiv double %conv.i19, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i20, 4
  %call.i21 = tail call i8* @realloc(i8* %44, i64 %mul.i) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %48 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is28custom_sub_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %sum = add i16 %v2, %v1
  %sum25 = add i16 %sum, %v3
  %sum26 = add i16 %sum25, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert33 = insertelement <8 x i16> undef, i16 %sum26, i32 0
  %broadcast.splat34 = shufflevector <8 x i16> %broadcast.splatinsert33, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = sub <8 x i16> zeroinitializer, %broadcast.splat34
  %15 = sub <8 x i16> zeroinitializer, %broadcast.splat34
  %16 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs28custom_sub_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  %17 = phi i32 [ %43, %_Z26check_shifted_variable_sumIs28custom_sub_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs28custom_sub_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load32.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %18 = add <8 x i16> %14, %wide.load.prol
  %19 = add <8 x i16> %15, %wide.load32.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa43.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi31.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %16, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %34, %vector.body ]
  %vec.phi31 = phi <8 x i16> [ %vec.phi31.unr, %vector.ph.split.split ], [ %35, %vector.body ]
  %20 = getelementptr inbounds i16, i16* %first, i64 %index
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = getelementptr i16, i16* %20, i64 8
  %23 = bitcast i16* %22 to <8 x i16>*
  %wide.load32 = load <8 x i16>, <8 x i16>* %23, align 2, !tbaa !14
  %24 = sub <8 x i16> %vec.phi, %broadcast.splat34
  %25 = sub <8 x i16> %vec.phi31, %broadcast.splat34
  %26 = add <8 x i16> %24, %wide.load
  %27 = add <8 x i16> %25, %wide.load32
  %index.next = add i64 %index, 16
  %28 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = getelementptr i16, i16* %28, i64 8
  %31 = bitcast i16* %30 to <8 x i16>*
  %wide.load32.1 = load <8 x i16>, <8 x i16>* %31, align 2, !tbaa !14
  %32 = sub <8 x i16> %26, %broadcast.splat34
  %33 = sub <8 x i16> %27, %broadcast.splat34
  %34 = add <8 x i16> %32, %wide.load.1
  %35 = add <8 x i16> %33, %wide.load32.1
  %index.next.1 = add i64 %index.next, 16
  %36 = icmp eq i64 %index.next.1, %n.vec
  br i1 %36, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !137

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa45 = phi <8 x i16> [ %35, %vector.body ]
  %.lcssa44 = phi <8 x i16> [ %34, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa43 = phi <8 x i16> [ %.lcssa43.unr, %vector.ph.split ], [ %.lcssa45, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa44, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi37 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa43, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi37, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf39 = shufflevector <8 x i16> %bin.rdx38, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx40 = add <8 x i16> %bin.rdx38, %rdx.shuf39
  %rdx.shuf41 = shufflevector <8 x i16> %bin.rdx40, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx42 = add <8 x i16> %bin.rdx40, %rdx.shuf41
  %37 = extractelement <8 x i16> %bin.rdx42, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %37, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %38 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %sub7.i = sub i16 %result.013.reg2mem.0, %sum26
  %add = add i16 %sub7.i, %38
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !138

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %37, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %39 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %39 to i16
  %sub7.i.i = sub i16 %conv.i, %sum26
  %40 = mul i16 %sub7.i.i, -8000
  %sub.i57.i24 = add i16 %result.0.lcssa.reg2mem.0, %40
  %conv3.i.i = sext i16 %sub.i57.i24 to i32
  %ispos.i.i = icmp sgt i16 %sub.i57.i24, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %41 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %41, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs28custom_sub_multiple_variableIsEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %42 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %42) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs28custom_sub_multiple_variableIsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs28custom_sub_multiple_variableIsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %43 = phi i32 [ %17, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %43
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs28custom_sub_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %44 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i18 = sub nsw i64 %call.i17, %44
  %conv.i19 = sitofp i64 %sub.i18 to double
  %div.i = fdiv double %conv.i19, 1.000000e+06
  %45 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %45, null
  %46 = bitcast %struct.one_result* %45 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %48 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %47, %48
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %49 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %48, %lor.lhs.false.i ]
  %add.i = add nsw i32 %49, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i20, 4
  %call.i21 = tail call i8* @realloc(i8* %46, i64 %mul.i) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %50 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %51 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %51) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %52 = phi %struct.one_result* [ %50, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %53 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %53 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %52, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %52, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %53, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Is24custom_multiply_variableIsEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %mul.i.i = mul i16 %v1, 8000
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs24custom_multiply_variableIsEEvT_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs24custom_multiply_variableIsEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs24custom_multiply_variableIsEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = mul <8 x i16> %wide.load.prol, %broadcast.splat28
  %17 = mul <8 x i16> %wide.load26.prol, %broadcast.splat28
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = mul <8 x i16> %wide.load, %broadcast.splat28
  %23 = mul <8 x i16> %wide.load26, %broadcast.splat28
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = mul <8 x i16> %wide.load.1, %broadcast.splat28
  %31 = mul <8 x i16> %wide.load26.1, %broadcast.splat28
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !139

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %mul.i = mul i16 %36, %v1
  %add = add i16 %mul.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !140

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %38 = mul i16 %mul.i.i, %conv.i
  %sub.i6.i = sub i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs24custom_multiply_variableIsEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs24custom_multiply_variableIsEEvT_S2_.exit

_Z26check_shifted_variable_sumIs24custom_multiply_variableIsEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs24custom_multiply_variableIsEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %44, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %48 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is33custom_multiply_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %mul.i.i = mul i16 %v1, 8000
  %mul3.i.i = mul i16 %mul.i.i, %v2
  %mul5.i.i = mul i16 %mul3.i.i, %v3
  %mul7.i.i = mul i16 %mul5.i.i, %v4
  %mul.i = mul i16 %v2, %v1
  %mul3.i = mul i16 %mul.i, %v3
  %mul5.i = mul i16 %mul3.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %mul5.i, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs33custom_multiply_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs33custom_multiply_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs33custom_multiply_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = mul <8 x i16> %broadcast.splat28, %wide.load.prol
  %17 = mul <8 x i16> %broadcast.splat28, %wide.load26.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = mul <8 x i16> %broadcast.splat28, %wide.load
  %23 = mul <8 x i16> %broadcast.splat28, %wide.load26
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = mul <8 x i16> %broadcast.splat28, %wide.load.1
  %31 = mul <8 x i16> %broadcast.splat28, %wide.load26.1
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !141

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %mul7.i = mul i16 %mul5.i, %36
  %add = add i16 %mul7.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !142

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %38 = mul i16 %mul7.i.i, %conv.i
  %sub.i6.i = sub i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs33custom_multiply_multiple_variableIsEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs33custom_multiply_multiple_variableIsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs33custom_multiply_multiple_variableIsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs33custom_multiply_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %44, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %48 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is34custom_multiply_multiple_variable2IsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %mul.i.i = mul i16 %v2, %v1
  %mul4.i.i = mul i16 %mul.i.i, %v3
  %mul6.i.i = mul i16 %mul4.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert29 = insertelement <8 x i16> undef, i16 %mul6.i.i, i32 0
  %broadcast.splat30 = shufflevector <8 x i16> %broadcast.splatinsert29, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs34custom_multiply_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs34custom_multiply_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs34custom_multiply_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load28.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = add <8 x i16> %broadcast.splat30, %wide.load.prol
  %17 = add <8 x i16> %broadcast.splat30, %wide.load28.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa39.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi27.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi27 = phi <8 x i16> [ %vec.phi27.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load28 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = add <8 x i16> %vec.phi, %broadcast.splat30
  %23 = add <8 x i16> %vec.phi27, %broadcast.splat30
  %24 = add <8 x i16> %22, %wide.load
  %25 = add <8 x i16> %23, %wide.load28
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load28.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = add <8 x i16> %24, %broadcast.splat30
  %31 = add <8 x i16> %25, %broadcast.splat30
  %32 = add <8 x i16> %30, %wide.load.1
  %33 = add <8 x i16> %31, %wide.load28.1
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !143

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa41 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa40 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa39 = phi <8 x i16> [ %.lcssa39.unr, %vector.ph.split ], [ %.lcssa41, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa40, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi33 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa39, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi33, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %rdx.shuf37 = shufflevector <8 x i16> %bin.rdx36, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <8 x i16> %bin.rdx36, %rdx.shuf37
  %35 = extractelement <8 x i16> %bin.rdx38, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %add.i = add i16 %result.013.reg2mem.0, %mul6.i.i
  %add = add i16 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !144

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %add.i.i = add i16 %conv.i, %mul6.i.i
  %38 = mul i16 %add.i.i, -8000
  %sub.i6.i25 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i25 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i25, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs34custom_multiply_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs34custom_multiply_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs34custom_multiply_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs34custom_multiply_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i19 = add nsw i32 %47, 10
  store i32 %add.i19, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i19 to i64
  %mul.i21 = shl nsw i64 %conv.i20, 4
  %call.i22 = tail call i8* @realloc(i8* %44, i64 %mul.i21) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %48 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Is22custom_divide_variableIsEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %conv1.i.i = sext i16 %v1 to i32
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i16, i16* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs22custom_divide_variableIsEEvT_S2_.exit
  %14 = phi i32 [ %62, %_Z26check_shifted_variable_sumIs22custom_divide_variableIsEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs22custom_divide_variableIsEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i16, i16* %first, align 2, !tbaa !14
  %16 = load i16, i16* %12, align 2, !tbaa !14
  %17 = sext i16 %15 to i32
  %18 = sext i16 %16 to i32
  %19 = sdiv i32 %17, %conv1.i.i
  %20 = sdiv i32 %18, %conv1.i.i
  %21 = trunc i32 %19 to i16
  %22 = trunc i32 %20 to i16
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa30.unr = phi i16 [ 0, %vector.body.preheader ], [ %22, %vector.body.prol ]
  %.lcssa.unr = phi i16 [ 0, %vector.body.preheader ], [ %21, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i16 [ 0, %vector.body.preheader ], [ %21, %vector.body.prol ]
  %vec.phi27.unr = phi i16 [ 0, %vector.body.preheader ], [ %22, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i16 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %45, %vector.body ]
  %vec.phi27 = phi i16 [ %vec.phi27.unr, %vector.body.preheader.split.split ], [ %46, %vector.body ]
  %induction2629 = or i64 %index, 1
  %23 = getelementptr inbounds i16, i16* %first, i64 %index
  %24 = getelementptr inbounds i16, i16* %first, i64 %induction2629
  %25 = load i16, i16* %23, align 2, !tbaa !14
  %26 = load i16, i16* %24, align 2, !tbaa !14
  %27 = sext i16 %25 to i32
  %28 = sext i16 %26 to i32
  %29 = sdiv i32 %27, %conv1.i.i
  %30 = sdiv i32 %28, %conv1.i.i
  %31 = trunc i32 %29 to i16
  %32 = trunc i32 %30 to i16
  %33 = add i16 %31, %vec.phi
  %34 = add i16 %32, %vec.phi27
  %index.next = add i64 %index, 2
  %induction2629.1 = or i64 %index.next, 1
  %35 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %36 = getelementptr inbounds i16, i16* %first, i64 %induction2629.1
  %37 = load i16, i16* %35, align 2, !tbaa !14
  %38 = load i16, i16* %36, align 2, !tbaa !14
  %39 = sext i16 %37 to i32
  %40 = sext i16 %38 to i32
  %41 = sdiv i32 %39, %conv1.i.i
  %42 = sdiv i32 %40, %conv1.i.i
  %43 = trunc i32 %41 to i16
  %44 = trunc i32 %42 to i16
  %45 = add i16 %43, %33
  %46 = add i16 %44, %34
  %index.next.1 = add i64 %index.next, 2
  %47 = icmp eq i64 %index.next.1, %n.vec
  br i1 %47, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !145

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa34 = phi i16 [ %46, %vector.body ]
  %.lcssa33 = phi i16 [ %45, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi i16 [ %.lcssa30.unr, %vector.body.preheader.split ], [ %.lcssa34, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i16 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i16 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi i16 [ 0, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add i16 %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %48 = add i64 %resume.val, 1
  %49 = trunc i64 %48 to i32
  %50 = sub i32 %11, %49
  %51 = sub i32 %count, %49
  %xtraiter31 = and i32 %50, 3
  %lcmp.mod32 = icmp ne i32 %xtraiter31, 0
  br i1 %lcmp.mod32, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.013.reg2mem.0.prol = phi i16 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter31, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.prol
  %52 = load i16, i16* %arrayidx.prol, align 2, !tbaa !14
  %conv.i.prol = sext i16 %52 to i32
  %div.i.prol = sdiv i32 %conv.i.prol, %conv1.i.i
  %conv2.i.prol = trunc i32 %div.i.prol to i16
  %add.prol = add i16 %conv2.i.prol, %result.013.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !146

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i16 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i16 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.013.reg2mem.0.unr = phi i16 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %53 = icmp ult i32 %51, 3
  br i1 %53, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.013.reg2mem.0 = phi i16 [ %result.013.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %54 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %conv.i = sext i16 %54 to i32
  %div.i = sdiv i32 %conv.i, %conv1.i.i
  %conv2.i = trunc i32 %div.i to i16
  %add = add i16 %conv2.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.next
  %55 = load i16, i16* %arrayidx.1, align 2, !tbaa !14
  %conv.i.1 = sext i16 %55 to i32
  %div.i.1 = sdiv i32 %conv.i.1, %conv1.i.i
  %conv2.i.1 = trunc i32 %div.i.1 to i16
  %add.1 = add i16 %conv2.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.next.1
  %56 = load i16, i16* %arrayidx.2, align 2, !tbaa !14
  %conv.i.2 = sext i16 %56 to i32
  %div.i.2 = sdiv i32 %conv.i.2, %conv1.i.i
  %conv2.i.2 = trunc i32 %div.i.2 to i16
  %add.2 = add i16 %conv2.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.next.2
  %57 = load i16, i16* %arrayidx.3, align 2, !tbaa !14
  %conv.i.3 = sext i16 %57 to i32
  %div.i.3 = sdiv i32 %conv.i.3, %conv1.i.i
  %conv2.i.3 = trunc i32 %div.i.3 to i16
  %add.3 = add i16 %conv2.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !147

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i16 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i16 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %58 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i17 = fptosi double %58 to i16
  %conv.i.i = sext i16 %conv.i17 to i32
  %div.i.i = sdiv i32 %conv.i.i, %conv1.i.i
  %conv2.i.i = trunc i32 %div.i.i to i16
  %59 = mul i16 %conv2.i.i, -8000
  %sub.i6.i25 = add i16 %result.0.lcssa.reg2mem.0, %59
  %conv3.i.i = sext i16 %sub.i6.i25 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i25, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %60 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %60, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs22custom_divide_variableIsEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %61 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %61) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs22custom_divide_variableIsEEvT_S2_.exit

_Z26check_shifted_variable_sumIs22custom_divide_variableIsEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %62 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %62
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs22custom_divide_variableIsEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i18 = tail call i64 @clock() #5
  store i64 %call.i18, i64* @end_time, align 8, !tbaa !11
  %63 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i18, %63
  %conv.i19 = sitofp i64 %sub.i to double
  %div.i20 = fdiv double %conv.i19, 1.000000e+06
  %64 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %64, null
  %65 = bitcast %struct.one_result* %64 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end8
  %66 = load i32, i32* @current_test, align 4, !tbaa !5
  %67 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %66, %67
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %68 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %67, %lor.lhs.false.i ]
  %add.i = add nsw i32 %68, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i21 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i21, 4
  %call.i22 = tail call i8* @realloc(i8* %65, i64 %mul.i) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %69 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %70 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %70) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %71 = phi %struct.one_result* [ %69, %if.then.if.end5_crit_edge.i ], [ %64, %lor.lhs.false.i ]
  %72 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %66, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %72 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %71, i64 %idxprom.i, i32 0
  store double %div.i20, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %71, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %72, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is31custom_divide_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %conv1.i.i = sext i16 %v1 to i32
  %conv2.i.i = sext i16 %v2 to i32
  %conv4.i.i = sext i16 %v3 to i32
  %conv6.i.i = sext i16 %v4 to i32
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs31custom_divide_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  %5 = phi i32 [ %37, %_Z26check_shifted_variable_sumIs31custom_divide_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs31custom_divide_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi = phi i16 [ %22, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi27 = phi i16 [ %23, %vector.body ], [ 0, %vector.body.preheader ]
  %induction2629 = or i64 %index, 1
  %6 = getelementptr inbounds i16, i16* %first, i64 %index
  %7 = getelementptr inbounds i16, i16* %first, i64 %induction2629
  %8 = load i16, i16* %6, align 2, !tbaa !14
  %9 = load i16, i16* %7, align 2, !tbaa !14
  %10 = sext i16 %8 to i32
  %11 = sext i16 %9 to i32
  %12 = sdiv i32 %10, %conv1.i.i
  %13 = sdiv i32 %11, %conv1.i.i
  %14 = sdiv i32 %12, %conv2.i.i
  %15 = sdiv i32 %13, %conv2.i.i
  %16 = sdiv i32 %14, %conv4.i.i
  %17 = sdiv i32 %15, %conv4.i.i
  %18 = sdiv i32 %16, %conv6.i.i
  %19 = sdiv i32 %17, %conv6.i.i
  %20 = trunc i32 %18 to i16
  %21 = trunc i32 %19 to i16
  %22 = add i16 %20, %vec.phi
  %23 = add i16 %21, %vec.phi27
  %index.next = add i64 %index, 2
  %24 = icmp eq i64 %index.next, %n.vec
  br i1 %24, label %middle.block.loopexit, label %vector.body, !llvm.loop !148

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa31 = phi i16 [ %23, %vector.body ]
  %.lcssa = phi i16 [ %22, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i16 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi i16 [ 0, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add i16 %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %25 = add i64 %resume.val, 1
  %26 = trunc i64 %25 to i32
  %27 = sub i32 %4, %26
  %28 = sub i32 %count, %26
  %xtraiter = and i32 %27, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %arrayidx.prol = getelementptr inbounds i16, i16* %first, i64 %resume.val
  %29 = load i16, i16* %arrayidx.prol, align 2, !tbaa !14
  %conv.i.prol = sext i16 %29 to i32
  %div.i.prol = sdiv i32 %conv.i.prol, %conv1.i.i
  %div3.i.prol = sdiv i32 %div.i.prol, %conv2.i.i
  %div5.i.prol = sdiv i32 %div3.i.prol, %conv4.i.i
  %div7.i.prol = sdiv i32 %div5.i.prol, %conv6.i.i
  %conv8.i.prol = trunc i32 %div7.i.prol to i16
  %add.prol = add i16 %conv8.i.prol, %bin.rdx
  %indvars.iv.next.prol = add nuw nsw i64 %resume.val, 1
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi i16 [ 0, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol, %for.body3.prol ]
  %result.013.reg2mem.0.unr = phi i16 [ %bin.rdx, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %30 = icmp ult i32 %28, 1
  br i1 %30, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.013.reg2mem.0 = phi i16 [ %result.013.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %31 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %conv.i = sext i16 %31 to i32
  %div.i = sdiv i32 %conv.i, %conv1.i.i
  %div3.i = sdiv i32 %div.i, %conv2.i.i
  %div5.i = sdiv i32 %div3.i, %conv4.i.i
  %div7.i = sdiv i32 %div5.i, %conv6.i.i
  %conv8.i = trunc i32 %div7.i to i16
  %add = add i16 %conv8.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.next
  %32 = load i16, i16* %arrayidx.1, align 2, !tbaa !14
  %conv.i.1 = sext i16 %32 to i32
  %div.i.1 = sdiv i32 %conv.i.1, %conv1.i.i
  %div3.i.1 = sdiv i32 %div.i.1, %conv2.i.i
  %div5.i.1 = sdiv i32 %div3.i.1, %conv4.i.i
  %div7.i.1 = sdiv i32 %div5.i.1, %conv6.i.i
  %conv8.i.1 = trunc i32 %div7.i.1 to i16
  %add.1 = add i16 %conv8.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !149

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi i16 [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i16 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %33 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i19 = fptosi double %33 to i16
  %conv.i.i = sext i16 %conv.i19 to i32
  %div.i.i = sdiv i32 %conv.i.i, %conv1.i.i
  %div3.i.i = sdiv i32 %div.i.i, %conv2.i.i
  %div5.i.i = sdiv i32 %div3.i.i, %conv4.i.i
  %div7.i.i = sdiv i32 %div5.i.i, %conv6.i.i
  %conv8.i.i = trunc i32 %div7.i.i to i16
  %34 = mul i16 %conv8.i.i, -8000
  %sub.i6.i25 = add i16 %result.0.lcssa.reg2mem.0, %34
  %conv3.i.i = sext i16 %sub.i6.i25 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i25, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %35 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %35, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs31custom_divide_multiple_variableIsEEvT_S2_S2_S2_S2_.exit, label %if.then.i21

if.then.i21:                                      ; preds = %for.end
  %36 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i20 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %36) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs31custom_divide_multiple_variableIsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs31custom_divide_multiple_variableIsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i21
  %37 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i21 ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %37
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs31custom_divide_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i22 = tail call i64 @clock() #5
  store i64 %call.i22, i64* @end_time, align 8, !tbaa !11
  %38 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i22, %38
  %conv.i23 = sitofp i64 %sub.i to double
  %div.i24 = fdiv double %conv.i23, 1.000000e+06
  %39 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %39, null
  %40 = bitcast %struct.one_result* %39 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i

lor.lhs.false.i:                                  ; preds = %for.end8
  %41 = load i32, i32* @current_test, align 4, !tbaa !5
  %42 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %41, %42
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i

if.then.i:                                        ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %43 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %42, %lor.lhs.false.i ]
  %add.i = add nsw i32 %43, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i17, 4
  %call.i18 = tail call i8* @realloc(i8* %40, i64 %mul.i) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i
  %44 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i
  %45 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %45) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %46 = phi %struct.one_result* [ %44, %if.then.if.end5_crit_edge.i ], [ %39, %lor.lhs.false.i ]
  %47 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %47 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %46, i64 %idxprom.i, i32 0
  store double %div.i24, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %46, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %47, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is32custom_divide_multiple_variable2IsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %conv1.i.i = sext i16 %v1 to i32
  %conv2.i.i = sext i16 %v2 to i32
  %div.i.i = sdiv i32 %conv1.i.i, %conv2.i.i
  %conv3.i.i = sext i16 %v3 to i32
  %div4.i.i = sdiv i32 %div.i.i, %conv3.i.i
  %conv5.i.i = sext i16 %v4 to i32
  %div6.i.i = sdiv i32 %div4.i.i, %conv5.i.i
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert29 = insertelement <4 x i32> undef, i32 %div6.i.i, i32 0
  %broadcast.splat30 = shufflevector <4 x i32> %broadcast.splatinsert29, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <4 x i16>*
  %12 = getelementptr i16, i16* %first, i64 4
  %13 = bitcast i16* %12 to <4 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs32custom_divide_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %53, %_Z26check_shifted_variable_sumIs32custom_divide_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs32custom_divide_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i16>, <4 x i16>* %11, align 2, !tbaa !14
  %wide.load28.prol = load <4 x i16>, <4 x i16>* %13, align 2, !tbaa !14
  %16 = zext <4 x i16> %wide.load.prol to <4 x i32>
  %17 = zext <4 x i16> %wide.load28.prol to <4 x i32>
  %18 = add <4 x i32> %broadcast.splat30, %16
  %19 = add <4 x i32> %broadcast.splat30, %17
  %20 = trunc <4 x i32> %18 to <4 x i16>
  %21 = trunc <4 x i32> %19 to <4 x i16>
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <4 x i16> [ zeroinitializer, %vector.ph ], [ %21, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i16> [ zeroinitializer, %vector.ph ], [ %20, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i16> [ zeroinitializer, %vector.ph ], [ %20, %vector.body.prol ]
  %vec.phi27.unr = phi <4 x i16> [ zeroinitializer, %vector.ph ], [ %21, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %44, %vector.body ]
  %vec.phi27 = phi <4 x i16> [ %vec.phi27.unr, %vector.ph.split.split ], [ %45, %vector.body ]
  %22 = getelementptr inbounds i16, i16* %first, i64 %index
  %23 = bitcast i16* %22 to <4 x i16>*
  %wide.load = load <4 x i16>, <4 x i16>* %23, align 2, !tbaa !14
  %24 = getelementptr i16, i16* %22, i64 4
  %25 = bitcast i16* %24 to <4 x i16>*
  %wide.load28 = load <4 x i16>, <4 x i16>* %25, align 2, !tbaa !14
  %26 = zext <4 x i16> %wide.load to <4 x i32>
  %27 = zext <4 x i16> %wide.load28 to <4 x i32>
  %28 = add <4 x i32> %broadcast.splat30, %26
  %29 = add <4 x i32> %broadcast.splat30, %27
  %30 = trunc <4 x i32> %28 to <4 x i16>
  %31 = trunc <4 x i32> %29 to <4 x i16>
  %32 = add <4 x i16> %30, %vec.phi
  %33 = add <4 x i16> %31, %vec.phi27
  %index.next = add i64 %index, 8
  %34 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %35 = bitcast i16* %34 to <4 x i16>*
  %wide.load.1 = load <4 x i16>, <4 x i16>* %35, align 2, !tbaa !14
  %36 = getelementptr i16, i16* %34, i64 4
  %37 = bitcast i16* %36 to <4 x i16>*
  %wide.load28.1 = load <4 x i16>, <4 x i16>* %37, align 2, !tbaa !14
  %38 = zext <4 x i16> %wide.load.1 to <4 x i32>
  %39 = zext <4 x i16> %wide.load28.1 to <4 x i32>
  %40 = add <4 x i32> %broadcast.splat30, %38
  %41 = add <4 x i32> %broadcast.splat30, %39
  %42 = trunc <4 x i32> %40 to <4 x i16>
  %43 = trunc <4 x i32> %41 to <4 x i16>
  %44 = add <4 x i16> %42, %32
  %45 = add <4 x i16> %43, %33
  %index.next.1 = add i64 %index.next, 8
  %46 = icmp eq i64 %index.next.1, %n.vec
  br i1 %46, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !150

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <4 x i16> [ %45, %vector.body ]
  %.lcssa38 = phi <4 x i16> [ %44, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <4 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi33 = phi <4 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <4 x i16> %rdx.vec.exit.phi33, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i16> %bin.rdx, <4 x i16> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx34 = add <4 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf35 = shufflevector <4 x i16> %bin.rdx34, <4 x i16> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <4 x i16> %bin.rdx34, %rdx.shuf35
  %47 = extractelement <4 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %47, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %48 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %conv8.i = zext i16 %48 to i32
  %add.i = add i32 %div6.i.i, %conv8.i
  %conv7.i = trunc i32 %add.i to i16
  %add = add i16 %conv7.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !151

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %47, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %49 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i19 = fptosi double %49 to i16
  %conv8.i.i = zext i16 %conv.i19 to i32
  %add.i.i = add i32 %div6.i.i, %conv8.i.i
  %conv7.i.i = trunc i32 %add.i.i to i16
  %50 = mul i16 %conv7.i.i, -8000
  %sub.i7.i25 = add i16 %result.0.lcssa.reg2mem.0, %50
  %conv3.i5.i = sext i16 %sub.i7.i25 to i32
  %ispos.i.i = icmp sgt i16 %sub.i7.i25, -1
  %neg.i.i = sub nsw i32 0, %conv3.i5.i
  %51 = select i1 %ispos.i.i, i32 %conv3.i5.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %51, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs32custom_divide_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit, label %if.then.i21

if.then.i21:                                      ; preds = %for.end
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i20 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %52) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs32custom_divide_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs32custom_divide_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i21
  %53 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i21 ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %53
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs32custom_divide_multiple_variable2IsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i22 = tail call i64 @clock() #5
  store i64 %call.i22, i64* @end_time, align 8, !tbaa !11
  %54 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i22, %54
  %conv.i23 = sitofp i64 %sub.i to double
  %div.i24 = fdiv double %conv.i23, 1.000000e+06
  %55 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %55, null
  %56 = bitcast %struct.one_result* %55 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i

lor.lhs.false.i:                                  ; preds = %for.end8
  %57 = load i32, i32* @current_test, align 4, !tbaa !5
  %58 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %57, %58
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i

if.then.i:                                        ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %59 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %58, %lor.lhs.false.i ]
  %add.i17 = add nsw i32 %59, 10
  store i32 %add.i17, i32* @allocated_results, align 4, !tbaa !5
  %conv.i = sext i32 %add.i17 to i64
  %mul.i = shl nsw i64 %conv.i, 4
  %call.i18 = tail call i8* @realloc(i8* %56, i64 %mul.i) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i
  %60 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i
  %61 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %61) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %62 = phi %struct.one_result* [ %60, %if.then.if.end5_crit_edge.i ], [ %55, %lor.lhs.false.i ]
  %63 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %57, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %63 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %62, i64 %idxprom.i, i32 0
  store double %div.i24, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %62, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %63, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is30custom_mixed_multiple_variableIsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %conv17.i.i = zext i16 %v1 to i32
  %conv2.i.i = sext i16 %v2 to i32
  %conv3.i.i = sext i16 %v3 to i32
  %mul.i.i = mul nsw i32 %conv3.i.i, %conv2.i.i
  %conv4.i.i = sext i16 %v4 to i32
  %div.i.i = sdiv i32 %mul.i.i, %conv4.i.i
  %add.i.i = sub i32 %conv17.i.i, %div.i.i
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert31 = insertelement <4 x i32> undef, i32 %conv17.i.i, i32 0
  %broadcast.splat32 = shufflevector <4 x i32> %broadcast.splatinsert31, <4 x i32> undef, <4 x i32> zeroinitializer
  %broadcast.splatinsert33 = insertelement <4 x i32> undef, i32 %div.i.i, i32 0
  %broadcast.splat34 = shufflevector <4 x i32> %broadcast.splatinsert33, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs30custom_mixed_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  %4 = phi i32 [ %26, %_Z26check_shifted_variable_sumIs30custom_mixed_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs30custom_mixed_multiple_variableIsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body ]
  %vec.phi29 = phi <4 x i16> [ zeroinitializer, %vector.ph ], [ %18, %vector.body ]
  %5 = getelementptr inbounds i16, i16* %first, i64 %index
  %6 = bitcast i16* %5 to <4 x i16>*
  %wide.load = load <4 x i16>, <4 x i16>* %6, align 2, !tbaa !14
  %7 = getelementptr i16, i16* %5, i64 4
  %8 = bitcast i16* %7 to <4 x i16>*
  %wide.load30 = load <4 x i16>, <4 x i16>* %8, align 2, !tbaa !14
  %9 = zext <4 x i16> %wide.load to <4 x i32>
  %10 = zext <4 x i16> %wide.load30 to <4 x i32>
  %11 = add nuw nsw <4 x i32> %9, %broadcast.splat32
  %12 = add nuw nsw <4 x i32> %10, %broadcast.splat32
  %13 = sub <4 x i32> %11, %broadcast.splat34
  %14 = sub <4 x i32> %12, %broadcast.splat34
  %15 = trunc <4 x i32> %13 to <4 x i16>
  %16 = trunc <4 x i32> %14 to <4 x i16>
  %17 = add <4 x i16> %15, %vec.phi
  %18 = add <4 x i16> %16, %vec.phi29
  %index.next = add i64 %index, 8
  %19 = icmp eq i64 %index.next, %n.vec
  br i1 %19, label %middle.block.loopexit, label %vector.body, !llvm.loop !152

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa42 = phi <4 x i16> [ %18, %vector.body ]
  %.lcssa = phi <4 x i16> [ %17, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi37 = phi <4 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa42, %middle.block.loopexit ]
  %bin.rdx = add <4 x i16> %rdx.vec.exit.phi37, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i16> %bin.rdx, <4 x i16> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx38 = add <4 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf39 = shufflevector <4 x i16> %bin.rdx38, <4 x i16> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx40 = add <4 x i16> %bin.rdx38, %rdx.shuf39
  %20 = extractelement <4 x i16> %bin.rdx40, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %20, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %21 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %conv6.i = zext i16 %21 to i32
  %add.i = add nuw nsw i32 %conv6.i, %conv17.i.i
  %sub.i = sub i32 %add.i, %div.i.i
  %conv5.i = trunc i32 %sub.i to i16
  %add = add i16 %conv5.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !153

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %20, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %22 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i20 = fptosi double %22 to i16
  %conv6.i.i = zext i16 %conv.i20 to i32
  %sub.i.i = add i32 %add.i.i, %conv6.i.i
  %conv5.i.i = trunc i32 %sub.i.i to i16
  %23 = mul i16 %conv5.i.i, -8000
  %sub.i58.i27 = add i16 %result.0.lcssa.reg2mem.0, %23
  %conv3.i6.i = sext i16 %sub.i58.i27 to i32
  %ispos.i.i = icmp sgt i16 %sub.i58.i27, -1
  %neg.i.i = sub nsw i32 0, %conv3.i6.i
  %24 = select i1 %ispos.i.i, i32 %conv3.i6.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %24, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs30custom_mixed_multiple_variableIsEEvT_S2_S2_S2_S2_.exit, label %if.then.i22

if.then.i22:                                      ; preds = %for.end
  %25 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %25) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs30custom_mixed_multiple_variableIsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs30custom_mixed_multiple_variableIsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i22
  %26 = phi i32 [ %4, %for.end ], [ %.pre, %if.then.i22 ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %26
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs30custom_mixed_multiple_variableIsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i23 = tail call i64 @clock() #5
  store i64 %call.i23, i64* @end_time, align 8, !tbaa !11
  %27 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i24 = sub nsw i64 %call.i23, %27
  %conv.i25 = sitofp i64 %sub.i24 to double
  %div.i26 = fdiv double %conv.i25, 1.000000e+06
  %28 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %28, null
  %29 = bitcast %struct.one_result* %28 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i

lor.lhs.false.i:                                  ; preds = %for.end8
  %30 = load i32, i32* @current_test, align 4, !tbaa !5
  %31 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %30, %31
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i

if.then.i:                                        ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %32 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %31, %lor.lhs.false.i ]
  %add.i17 = add nsw i32 %32, 10
  store i32 %add.i17, i32* @allocated_results, align 4, !tbaa !5
  %conv.i = sext i32 %add.i17 to i64
  %mul.i18 = shl nsw i64 %conv.i, 4
  %call.i19 = tail call i8* @realloc(i8* %29, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i
  %33 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i
  %34 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %34) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %35 = phi %struct.one_result* [ %33, %if.then.if.end5_crit_edge.i ], [ %28, %lor.lhs.false.i ]
  %36 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %30, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %36 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %35, i64 %idxprom.i, i32 0
  store double %div.i26, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %35, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %36, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Is19custom_variable_andIsEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs19custom_variable_andIsEEvT_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs19custom_variable_andIsEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs19custom_variable_andIsEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = and <8 x i16> %wide.load.prol, %broadcast.splat28
  %17 = and <8 x i16> %wide.load26.prol, %broadcast.splat28
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = and <8 x i16> %wide.load, %broadcast.splat28
  %23 = and <8 x i16> %wide.load26, %broadcast.splat28
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = and <8 x i16> %wide.load.1, %broadcast.splat28
  %31 = and <8 x i16> %wide.load26.1, %broadcast.splat28
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !154

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %and3.i = and i16 %36, %v1
  %add = add i16 %and3.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !155

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %and3.i.i = and i16 %conv.i, %v1
  %38 = mul i16 %and3.i.i, -8000
  %sub.i6.i23 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i23 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i23, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs19custom_variable_andIsEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs19custom_variable_andIsEEvT_S2_.exit

_Z26check_shifted_variable_sumIs19custom_variable_andIsEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs19custom_variable_andIsEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i19, 4
  %call.i20 = tail call i8* @realloc(i8* %44, i64 %mul.i) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %48 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is28custom_multiple_variable_andIsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %and9.i.i = and i16 %v2, %v1
  %and310.i.i = and i16 %and9.i.i, %v3
  %and511.i.i = and i16 %and310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %and511.i.i, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs28custom_multiple_variable_andIsEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs28custom_multiple_variable_andIsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs28custom_multiple_variable_andIsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = and <8 x i16> %broadcast.splat28, %wide.load.prol
  %17 = and <8 x i16> %broadcast.splat28, %wide.load26.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = and <8 x i16> %broadcast.splat28, %wide.load
  %23 = and <8 x i16> %broadcast.splat28, %wide.load26
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = and <8 x i16> %broadcast.splat28, %wide.load.1
  %31 = and <8 x i16> %broadcast.splat28, %wide.load26.1
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !156

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %and712.i = and i16 %and511.i.i, %36
  %add = add i16 %and712.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !157

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %and712.i.i = and i16 %and511.i.i, %conv.i
  %38 = mul i16 %and712.i.i, -8000
  %sub.i6.i23 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i23 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i23, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs28custom_multiple_variable_andIsEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs28custom_multiple_variable_andIsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs28custom_multiple_variable_andIsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs28custom_multiple_variable_andIsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i19, 4
  %call.i20 = tail call i8* @realloc(i8* %44, i64 %mul.i) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %48 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Is18custom_variable_orIsEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs18custom_variable_orIsEEvT_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs18custom_variable_orIsEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs18custom_variable_orIsEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = or <8 x i16> %wide.load.prol, %broadcast.splat28
  %17 = or <8 x i16> %wide.load26.prol, %broadcast.splat28
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = or <8 x i16> %wide.load, %broadcast.splat28
  %23 = or <8 x i16> %wide.load26, %broadcast.splat28
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = or <8 x i16> %wide.load.1, %broadcast.splat28
  %31 = or <8 x i16> %wide.load26.1, %broadcast.splat28
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !158

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %or3.i = or i16 %36, %v1
  %add = add i16 %or3.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !159

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %or3.i.i = or i16 %conv.i, %v1
  %38 = mul i16 %or3.i.i, -8000
  %sub.i6.i23 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i23 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i23, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs18custom_variable_orIsEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs18custom_variable_orIsEEvT_S2_.exit

_Z26check_shifted_variable_sumIs18custom_variable_orIsEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs18custom_variable_orIsEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i19, 4
  %call.i20 = tail call i8* @realloc(i8* %44, i64 %mul.i) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %48 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is27custom_multiple_variable_orIsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %or9.i.i = or i16 %v2, %v1
  %or310.i.i = or i16 %or9.i.i, %v3
  %or511.i.i = or i16 %or310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %or511.i.i, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs27custom_multiple_variable_orIsEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs27custom_multiple_variable_orIsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs27custom_multiple_variable_orIsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = or <8 x i16> %broadcast.splat28, %wide.load.prol
  %17 = or <8 x i16> %broadcast.splat28, %wide.load26.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = or <8 x i16> %broadcast.splat28, %wide.load
  %23 = or <8 x i16> %broadcast.splat28, %wide.load26
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = or <8 x i16> %broadcast.splat28, %wide.load.1
  %31 = or <8 x i16> %broadcast.splat28, %wide.load26.1
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !160

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %or712.i = or i16 %or511.i.i, %36
  %add = add i16 %or712.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !161

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %or712.i.i = or i16 %or511.i.i, %conv.i
  %38 = mul i16 %or712.i.i, -8000
  %sub.i6.i23 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i23 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i23, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs27custom_multiple_variable_orIsEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs27custom_multiple_variable_orIsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs27custom_multiple_variable_orIsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs27custom_multiple_variable_orIsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i19, 4
  %call.i20 = tail call i8* @realloc(i8* %44, i64 %mul.i) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %48 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Is19custom_variable_xorIsEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs19custom_variable_xorIsEEvT_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs19custom_variable_xorIsEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs19custom_variable_xorIsEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = xor <8 x i16> %wide.load.prol, %broadcast.splat28
  %17 = xor <8 x i16> %wide.load26.prol, %broadcast.splat28
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = xor <8 x i16> %wide.load, %broadcast.splat28
  %23 = xor <8 x i16> %wide.load26, %broadcast.splat28
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = xor <8 x i16> %wide.load.1, %broadcast.splat28
  %31 = xor <8 x i16> %wide.load26.1, %broadcast.splat28
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !162

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %xor3.i = xor i16 %36, %v1
  %add = add i16 %xor3.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !163

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %xor3.i.i = xor i16 %conv.i, %v1
  %38 = mul i16 %xor3.i.i, -8000
  %sub.i6.i23 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i23 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i23, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs19custom_variable_xorIsEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs19custom_variable_xorIsEEvT_S2_.exit

_Z26check_shifted_variable_sumIs19custom_variable_xorIsEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs19custom_variable_xorIsEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i19, 4
  %call.i20 = tail call i8* @realloc(i8* %44, i64 %mul.i) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %48 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Is28custom_multiple_variable_xorIsEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 signext %v1, i16 signext %v2, i16 signext %v3, i16 signext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp15 = icmp sgt i32 %0, 0
  br i1 %cmp15, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp212 = icmp sgt i32 %count, 0
  %xor9.i.i = xor i16 %v2, %v1
  %xor310.i.i = xor i16 %xor9.i.i, %v3
  %xor511.i.i = xor i16 %xor310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %xor511.i.i, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIs28custom_multiple_variable_xorIsEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %41, %_Z26check_shifted_variable_sumIs28custom_multiple_variable_xorIsEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.016 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIs28custom_multiple_variable_xorIsEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp212, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = xor <8 x i16> %broadcast.splat28, %wide.load.prol
  %17 = xor <8 x i16> %broadcast.splat28, %wide.load26.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = xor <8 x i16> %broadcast.splat28, %wide.load
  %23 = xor <8 x i16> %broadcast.splat28, %wide.load26
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = xor <8 x i16> %broadcast.splat28, %wide.load.1
  %31 = xor <8 x i16> %broadcast.splat28, %wide.load26.1
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !164

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.013.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %xor712.i = xor i16 %xor511.i.i, %36
  %add = add i16 %xor712.i, %result.013.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !165

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i16
  %xor712.i.i = xor i16 %xor511.i.i, %conv.i
  %38 = mul i16 %xor712.i.i, -8000
  %sub.i6.i23 = add i16 %result.0.lcssa.reg2mem.0, %38
  %conv3.i.i = sext i16 %sub.i6.i23 to i32
  %ispos.i.i = icmp sgt i16 %sub.i6.i23, -1
  %neg.i.i = sub nsw i32 0, %conv3.i.i
  %39 = select i1 %ispos.i.i, i32 %conv3.i.i, i32 %neg.i.i
  %cmp.i.i = icmp slt i32 %39, 1
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIs28custom_multiple_variable_xorIsEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIs28custom_multiple_variable_xorIsEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIs28custom_multiple_variable_xorIsEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.016, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIs28custom_multiple_variable_xorIsEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i17 = tail call i64 @clock() #5
  store i64 %call.i17, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i17, %42
  %conv.i18 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i18, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i to i64
  %mul.i = shl nsw i64 %conv.i19, 4
  %call.i20 = tail call i8* @realloc(i8* %44, i64 %mul.i) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %48 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1It19custom_add_variableItEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat27 = shufflevector <8 x i16> %broadcast.splatinsert26, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load25.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = add <8 x i16> %broadcast.splat27, %wide.load.prol
  %17 = add <8 x i16> %broadcast.splat27, %wide.load25.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa36.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <8 x i16> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load25 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = add <8 x i16> %vec.phi, %broadcast.splat27
  %23 = add <8 x i16> %vec.phi24, %broadcast.splat27
  %24 = add <8 x i16> %22, %wide.load
  %25 = add <8 x i16> %23, %wide.load25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load25.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = add <8 x i16> %24, %broadcast.splat27
  %31 = add <8 x i16> %25, %broadcast.splat27
  %32 = add <8 x i16> %30, %wide.load.1
  %33 = add <8 x i16> %31, %wide.load25.1
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !166

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa38 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa37 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa36 = phi <8 x i16> [ %.lcssa36.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa36, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <8 x i16> %bin.rdx31, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <8 x i16> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <8 x i16> %bin.rdx33, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <8 x i16> %bin.rdx33, %rdx.shuf34
  %35 = extractelement <8 x i16> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %add.i = add i16 %result.011.reg2mem.0, %v1
  %add = add i16 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !167

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %add.i.i = add i16 %conv.i, %v1
  %mul.i = mul i16 %add.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit

_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i17 = add nsw i32 %45, 10
  store i32 %add.i17, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i17 to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1It19custom_add_variableItEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp16 = icmp sgt i32 %0, 0
  br i1 %cmp16, label %for.cond1.preheader.preheader, label %for.end12

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp213 = icmp sgt i32 %count, 0
  %conv6 = zext i16 %v1 to i32
  %mul = mul nsw i32 %conv6, %count
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = sext i32 %count to i64
  %4 = lshr i64 %3, 4
  %5 = mul i64 %4, 16
  %6 = add i64 %5, -16
  %7 = lshr i64 %6, 4
  %8 = add i64 %7, 1
  %backedge.overflow = icmp eq i32 %count, 0
  %n.vec = and i64 %2, -16
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %8, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %9 = icmp ult i64 %7, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit
  %10 = phi i32 [ %45, %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.017 = phi i32 [ %inc11, %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp213, label %polly.stmt.for.inc.preheader, label %for.end

polly.stmt.for.inc.preheader:                     ; preds = %for.cond1.preheader
  br i1 %backedge.overflow, label %polly.stmt.for.inc.preheader36, label %overflow.checked

polly.stmt.for.inc.preheader36:                   ; preds = %middle.block, %polly.stmt.for.inc.preheader
  %result.014.reg2mem.0.ph = phi i16 [ 0, %polly.stmt.for.inc.preheader ], [ %42, %middle.block ]
  %polly.indvar.ph = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %resume.val, %middle.block ]
  br label %polly.stmt.for.inc

overflow.checked:                                 ; preds = %polly.stmt.for.inc.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.preheader.split

vector.body.prol.preheader:                       ; preds = %vector.body.preheader
  br label %vector.body.prol

vector.body.prol:                                 ; preds = %vector.body.prol.preheader, %vector.body.prol
  %index.prol = phi i64 [ %index.next.prol, %vector.body.prol ], [ 0, %vector.body.prol.preheader ]
  %vec.phi.prol = phi <8 x i16> [ %15, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %vec.phi25.prol = phi <8 x i16> [ %16, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %vector.body.prol ], [ %xtraiter, %vector.body.prol.preheader ]
  %11 = getelementptr i16, i16* %first, i64 %index.prol
  %12 = bitcast i16* %11 to <8 x i16>*
  %wide.load.prol = load <8 x i16>, <8 x i16>* %12, align 2, !alias.scope !168, !noalias !170
  %13 = getelementptr i16, i16* %11, i64 8
  %14 = bitcast i16* %13 to <8 x i16>*
  %wide.load27.prol = load <8 x i16>, <8 x i16>* %14, align 2, !alias.scope !168, !noalias !170
  %15 = add <8 x i16> %wide.load.prol, %vec.phi.prol
  %16 = add <8 x i16> %wide.load27.prol, %vec.phi25.prol
  %index.next.prol = add i64 %index.prol, 16
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %vector.body.prol, label %vector.body.preheader.split.loopexit, !llvm.loop !175

vector.body.preheader.split.loopexit:             ; preds = %vector.body.prol
  %index.next.prol.lcssa = phi i64 [ %index.next.prol, %vector.body.prol ]
  %.lcssa41 = phi <8 x i16> [ %16, %vector.body.prol ]
  %.lcssa40 = phi <8 x i16> [ %15, %vector.body.prol ]
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.preheader.split.loopexit, %vector.body.preheader
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa41, %vector.body.preheader.split.loopexit ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa40, %vector.body.preheader.split.loopexit ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ %index.next.prol.lcssa, %vector.body.preheader.split.loopexit ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa40, %vector.body.preheader.split.loopexit ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa41, %vector.body.preheader.split.loopexit ]
  br i1 %9, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.3, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %39, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.body.preheader.split.split ], [ %40, %vector.body ]
  %17 = getelementptr i16, i16* %first, i64 %index
  %18 = bitcast i16* %17 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %18, align 2, !alias.scope !168, !noalias !170
  %19 = getelementptr i16, i16* %17, i64 8
  %20 = bitcast i16* %19 to <8 x i16>*
  %wide.load27 = load <8 x i16>, <8 x i16>* %20, align 2, !alias.scope !168, !noalias !170
  %21 = add <8 x i16> %wide.load, %vec.phi
  %22 = add <8 x i16> %wide.load27, %vec.phi25
  %index.next = add i64 %index, 16
  %23 = getelementptr i16, i16* %first, i64 %index.next
  %24 = bitcast i16* %23 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %24, align 2, !alias.scope !168, !noalias !170
  %25 = getelementptr i16, i16* %23, i64 8
  %26 = bitcast i16* %25 to <8 x i16>*
  %wide.load27.1 = load <8 x i16>, <8 x i16>* %26, align 2, !alias.scope !168, !noalias !170
  %27 = add <8 x i16> %wide.load.1, %21
  %28 = add <8 x i16> %wide.load27.1, %22
  %index.next.1 = add i64 %index.next, 16
  %29 = getelementptr i16, i16* %first, i64 %index.next.1
  %30 = bitcast i16* %29 to <8 x i16>*
  %wide.load.2 = load <8 x i16>, <8 x i16>* %30, align 2, !alias.scope !168, !noalias !170
  %31 = getelementptr i16, i16* %29, i64 8
  %32 = bitcast i16* %31 to <8 x i16>*
  %wide.load27.2 = load <8 x i16>, <8 x i16>* %32, align 2, !alias.scope !168, !noalias !170
  %33 = add <8 x i16> %wide.load.2, %27
  %34 = add <8 x i16> %wide.load27.2, %28
  %index.next.2 = add i64 %index.next.1, 16
  %35 = getelementptr i16, i16* %first, i64 %index.next.2
  %36 = bitcast i16* %35 to <8 x i16>*
  %wide.load.3 = load <8 x i16>, <8 x i16>* %36, align 2, !alias.scope !168, !noalias !170
  %37 = getelementptr i16, i16* %35, i64 8
  %38 = bitcast i16* %37 to <8 x i16>*
  %wide.load27.3 = load <8 x i16>, <8 x i16>* %38, align 2, !alias.scope !168, !noalias !170
  %39 = add <8 x i16> %wide.load.3, %33
  %40 = add <8 x i16> %wide.load27.3, %34
  %index.next.3 = add i64 %index.next.2, 16
  %41 = icmp eq i64 %index.next.3, %n.vec
  br i1 %41, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !176

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %40, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %39, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.body.preheader.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <8 x i16> %bin.rdx31, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <8 x i16> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <8 x i16> %bin.rdx33, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <8 x i16> %bin.rdx33, %rdx.shuf34
  %42 = extractelement <8 x i16> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %2, %resume.val
  br i1 %cmp.n, label %for.end, label %polly.stmt.for.inc.preheader36

for.end.loopexit:                                 ; preds = %polly.stmt.for.inc
  %p_add.lcssa = phi i16 [ %p_add, %polly.stmt.for.inc ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %42, %middle.block ], [ %p_add.lcssa, %for.end.loopexit ]
  %conv7 = zext i16 %result.0.lcssa.reg2mem.0 to i32
  %add8 = add nsw i32 %conv7, %mul
  %conv9 = trunc i32 %add8 to i16
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %43 to i16
  %add.i.i = add i16 %conv.i, %v1
  %mul.i = mul i16 %add.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %conv9
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit

_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %10, %for.end ], [ %.pre, %if.then.i ]
  %inc11 = add nuw nsw i32 %i.017, 1
  %cmp = icmp slt i32 %inc11, %45
  br i1 %cmp, label %for.cond1.preheader, label %for.end12.loopexit

for.end12.loopexit:                               ; preds = %_Z26check_shifted_variable_sumIt19custom_add_variableItEEvT_S2_.exit
  br label %for.end12

for.end12:                                        ; preds = %for.end12.loopexit, %entry
  %call.i18 = tail call i64 @clock() #5
  store i64 %call.i18, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i18, %46
  %conv.i19 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i19, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end12
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i23

lor.lhs.false.i:                                  ; preds = %for.end12
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i23

if.then.i23:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i = add nsw i32 %51, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i20 = sext i32 %add.i to i64
  %mul.i21 = shl nsw i64 %conv.i20, 4
  %call.i22 = tail call i8* @realloc(i8* %48, i64 %mul.i21) #5
  store i8* %call.i22, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i22, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i23
  %52 = bitcast i8* %call.i22 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i23
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i24 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void

polly.stmt.for.inc:                               ; preds = %polly.stmt.for.inc.preheader36, %polly.stmt.for.inc
  %result.014.reg2mem.0 = phi i16 [ %p_add, %polly.stmt.for.inc ], [ %result.014.reg2mem.0.ph, %polly.stmt.for.inc.preheader36 ]
  %polly.indvar = phi i64 [ %polly.indvar_next, %polly.stmt.for.inc ], [ %polly.indvar.ph, %polly.stmt.for.inc.preheader36 ]
  %scevgep = getelementptr i16, i16* %first, i64 %polly.indvar
  %_p_scalar_ = load i16, i16* %scevgep, align 2, !alias.scope !168, !noalias !170
  %p_add = add i16 %_p_scalar_, %result.014.reg2mem.0
  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
  %exitcond = icmp eq i64 %polly.indvar_next, %1
  br i1 %exitcond, label %for.end.loopexit, label %polly.stmt.for.inc, !llvm.loop !177
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It28custom_add_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %add.i.i = add i16 %v2, %v1
  %add3.i.i = add i16 %add.i.i, %v3
  %add5.i.i = add i16 %add3.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <8 x i16> undef, i16 %add5.i.i, i32 0
  %broadcast.splat27 = shufflevector <8 x i16> %broadcast.splatinsert26, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt28custom_add_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt28custom_add_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt28custom_add_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load25.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = add <8 x i16> %broadcast.splat27, %wide.load.prol
  %17 = add <8 x i16> %broadcast.splat27, %wide.load25.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa36.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <8 x i16> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load25 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = add <8 x i16> %broadcast.splat27, %vec.phi
  %23 = add <8 x i16> %broadcast.splat27, %vec.phi24
  %24 = add <8 x i16> %22, %wide.load
  %25 = add <8 x i16> %23, %wide.load25
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load25.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = add <8 x i16> %broadcast.splat27, %24
  %31 = add <8 x i16> %broadcast.splat27, %25
  %32 = add <8 x i16> %30, %wide.load.1
  %33 = add <8 x i16> %31, %wide.load25.1
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !178

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa38 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa37 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa36 = phi <8 x i16> [ %.lcssa36.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa36, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <8 x i16> %bin.rdx31, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <8 x i16> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <8 x i16> %bin.rdx33, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <8 x i16> %bin.rdx33, %rdx.shuf34
  %35 = extractelement <8 x i16> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %add7.i = add i16 %add5.i.i, %result.011.reg2mem.0
  %add = add i16 %add7.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !179

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %add7.i.i = add i16 %add5.i.i, %conv.i
  %mul.i = mul i16 %add7.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt28custom_add_multiple_variableItEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt28custom_add_multiple_variableItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt28custom_add_multiple_variableItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt28custom_add_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i17 = add nsw i32 %45, 10
  store i32 %add.i17, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i17 to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1It19custom_sub_variableItEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat27 = shufflevector <8 x i16> %broadcast.splatinsert26, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt19custom_sub_variableItEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt19custom_sub_variableItEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt19custom_sub_variableItEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load25.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = sub <8 x i16> %wide.load.prol, %broadcast.splat27
  %17 = sub <8 x i16> %wide.load25.prol, %broadcast.splat27
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa36.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <8 x i16> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load25 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = sub <8 x i16> %wide.load, %broadcast.splat27
  %23 = sub <8 x i16> %wide.load25, %broadcast.splat27
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi24
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load25.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = sub <8 x i16> %wide.load.1, %broadcast.splat27
  %31 = sub <8 x i16> %wide.load25.1, %broadcast.splat27
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !180

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa38 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa37 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa36 = phi <8 x i16> [ %.lcssa36.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa36, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <8 x i16> %bin.rdx31, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <8 x i16> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <8 x i16> %bin.rdx33, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <8 x i16> %bin.rdx33, %rdx.shuf34
  %35 = extractelement <8 x i16> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %sub.i = sub i16 %36, %v1
  %add = add i16 %sub.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !181

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %sub.i.i = sub i16 %conv.i, %v1
  %mul.i = mul i16 %sub.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt19custom_sub_variableItEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt19custom_sub_variableItEEvT_S2_.exit

_Z26check_shifted_variable_sumIt19custom_sub_variableItEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt19custom_sub_variableItEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i16 = sub nsw i64 %call.i15, %40
  %conv.i17 = sitofp i64 %sub.i16 to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It28custom_sub_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %sum = add i16 %v2, %v1
  %sum23 = add i16 %sum, %v3
  %sum24 = add i16 %sum23, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert31 = insertelement <8 x i16> undef, i16 %sum24, i32 0
  %broadcast.splat32 = shufflevector <8 x i16> %broadcast.splatinsert31, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = sub <8 x i16> zeroinitializer, %broadcast.splat32
  %15 = sub <8 x i16> zeroinitializer, %broadcast.splat32
  %16 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt28custom_sub_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  %17 = phi i32 [ %41, %_Z26check_shifted_variable_sumIt28custom_sub_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt28custom_sub_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load30.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %18 = add <8 x i16> %14, %wide.load.prol
  %19 = add <8 x i16> %15, %wide.load30.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa41.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi29.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %16, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %34, %vector.body ]
  %vec.phi29 = phi <8 x i16> [ %vec.phi29.unr, %vector.ph.split.split ], [ %35, %vector.body ]
  %20 = getelementptr inbounds i16, i16* %first, i64 %index
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = getelementptr i16, i16* %20, i64 8
  %23 = bitcast i16* %22 to <8 x i16>*
  %wide.load30 = load <8 x i16>, <8 x i16>* %23, align 2, !tbaa !14
  %24 = sub <8 x i16> %vec.phi, %broadcast.splat32
  %25 = sub <8 x i16> %vec.phi29, %broadcast.splat32
  %26 = add <8 x i16> %24, %wide.load
  %27 = add <8 x i16> %25, %wide.load30
  %index.next = add i64 %index, 16
  %28 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = getelementptr i16, i16* %28, i64 8
  %31 = bitcast i16* %30 to <8 x i16>*
  %wide.load30.1 = load <8 x i16>, <8 x i16>* %31, align 2, !tbaa !14
  %32 = sub <8 x i16> %26, %broadcast.splat32
  %33 = sub <8 x i16> %27, %broadcast.splat32
  %34 = add <8 x i16> %32, %wide.load.1
  %35 = add <8 x i16> %33, %wide.load30.1
  %index.next.1 = add i64 %index.next, 16
  %36 = icmp eq i64 %index.next.1, %n.vec
  br i1 %36, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !182

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa43 = phi <8 x i16> [ %35, %vector.body ]
  %.lcssa42 = phi <8 x i16> [ %34, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa41 = phi <8 x i16> [ %.lcssa41.unr, %vector.ph.split ], [ %.lcssa43, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa42, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi35 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa41, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi35, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf37 = shufflevector <8 x i16> %bin.rdx36, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx38 = add <8 x i16> %bin.rdx36, %rdx.shuf37
  %rdx.shuf39 = shufflevector <8 x i16> %bin.rdx38, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx40 = add <8 x i16> %bin.rdx38, %rdx.shuf39
  %37 = extractelement <8 x i16> %bin.rdx40, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %37, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %38 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %sub7.i = sub i16 %result.011.reg2mem.0, %sum24
  %add = add i16 %sub7.i, %38
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !183

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %37, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %39 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %39 to i16
  %sub7.i.i = sub i16 %conv.i, %sum24
  %mul.i = mul i16 %sub7.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt28custom_sub_multiple_variableItEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt28custom_sub_multiple_variableItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt28custom_sub_multiple_variableItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %17, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt28custom_sub_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i16 = sub nsw i64 %call.i15, %42
  %conv.i17 = sitofp i64 %sub.i16 to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %44, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %48 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1It24custom_multiply_variableItEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %mul.i.i = mul i16 %v1, 8000
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat27 = shufflevector <8 x i16> %broadcast.splatinsert26, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt24custom_multiply_variableItEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt24custom_multiply_variableItEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt24custom_multiply_variableItEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load25.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = mul <8 x i16> %wide.load.prol, %broadcast.splat27
  %17 = mul <8 x i16> %wide.load25.prol, %broadcast.splat27
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa36.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <8 x i16> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load25 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = mul <8 x i16> %wide.load, %broadcast.splat27
  %23 = mul <8 x i16> %wide.load25, %broadcast.splat27
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi24
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load25.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = mul <8 x i16> %wide.load.1, %broadcast.splat27
  %31 = mul <8 x i16> %wide.load25.1, %broadcast.splat27
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !184

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa38 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa37 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa36 = phi <8 x i16> [ %.lcssa36.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa36, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <8 x i16> %bin.rdx31, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <8 x i16> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <8 x i16> %bin.rdx33, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <8 x i16> %bin.rdx33, %rdx.shuf34
  %35 = extractelement <8 x i16> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %mul.i = mul i16 %36, %v1
  %add = add i16 %mul.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !185

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %mul.i15 = mul i16 %mul.i.i, %conv.i
  %cmp.i.i = icmp eq i16 %mul.i15, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt24custom_multiply_variableItEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt24custom_multiply_variableItEEvT_S2_.exit

_Z26check_shifted_variable_sumIt24custom_multiply_variableItEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt24custom_multiply_variableItEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i16 = tail call i64 @clock() #5
  store i64 %call.i16, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i16, %40
  %conv.i17 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It33custom_multiply_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %mul.i.i = mul i16 %v1, 8000
  %mul3.i.i = mul i16 %mul.i.i, %v2
  %mul5.i.i = mul i16 %mul3.i.i, %v3
  %mul7.i.i = mul i16 %mul5.i.i, %v4
  %mul.i = mul i16 %v2, %v1
  %mul3.i = mul i16 %mul.i, %v3
  %mul5.i = mul i16 %mul3.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <8 x i16> undef, i16 %mul5.i, i32 0
  %broadcast.splat27 = shufflevector <8 x i16> %broadcast.splatinsert26, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt33custom_multiply_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt33custom_multiply_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt33custom_multiply_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load25.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = mul <8 x i16> %broadcast.splat27, %wide.load.prol
  %17 = mul <8 x i16> %broadcast.splat27, %wide.load25.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa36.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi24.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi24 = phi <8 x i16> [ %vec.phi24.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load25 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = mul <8 x i16> %broadcast.splat27, %wide.load
  %23 = mul <8 x i16> %broadcast.splat27, %wide.load25
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi24
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load25.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = mul <8 x i16> %broadcast.splat27, %wide.load.1
  %31 = mul <8 x i16> %broadcast.splat27, %wide.load25.1
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !186

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa38 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa37 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa36 = phi <8 x i16> [ %.lcssa36.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi30 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa36, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi30, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf32 = shufflevector <8 x i16> %bin.rdx31, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx33 = add <8 x i16> %bin.rdx31, %rdx.shuf32
  %rdx.shuf34 = shufflevector <8 x i16> %bin.rdx33, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <8 x i16> %bin.rdx33, %rdx.shuf34
  %35 = extractelement <8 x i16> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %mul7.i = mul i16 %mul5.i, %36
  %add = add i16 %mul7.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !187

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %mul.i15 = mul i16 %mul7.i.i, %conv.i
  %cmp.i.i = icmp eq i16 %mul.i15, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt33custom_multiply_multiple_variableItEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt33custom_multiply_multiple_variableItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt33custom_multiply_multiple_variableItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt33custom_multiply_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i16 = tail call i64 @clock() #5
  store i64 %call.i16, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i16, %40
  %conv.i17 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %42, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %46 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It34custom_multiply_multiple_variable2ItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %mul.i.i = mul i16 %v2, %v1
  %mul4.i.i = mul i16 %mul.i.i, %v3
  %mul6.i.i = mul i16 %mul4.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %mul6.i.i, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt34custom_multiply_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt34custom_multiply_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt34custom_multiply_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = add <8 x i16> %broadcast.splat28, %wide.load.prol
  %17 = add <8 x i16> %broadcast.splat28, %wide.load26.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = add <8 x i16> %vec.phi, %broadcast.splat28
  %23 = add <8 x i16> %vec.phi25, %broadcast.splat28
  %24 = add <8 x i16> %22, %wide.load
  %25 = add <8 x i16> %23, %wide.load26
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = add <8 x i16> %24, %broadcast.splat28
  %31 = add <8 x i16> %25, %broadcast.splat28
  %32 = add <8 x i16> %30, %wide.load.1
  %33 = add <8 x i16> %31, %wide.load26.1
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !188

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %add.i = add i16 %result.011.reg2mem.0, %mul6.i.i
  %add = add i16 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !189

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %add.i.i = add i16 %conv.i, %mul6.i.i
  %mul.i15 = mul i16 %add.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i15, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt34custom_multiply_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt34custom_multiply_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt34custom_multiply_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt34custom_multiply_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i16 = tail call i64 @clock() #5
  store i64 %call.i16, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i16, %40
  %conv.i17 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i17, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i18 = add nsw i32 %45, 10
  store i32 %add.i18, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i18 to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %42, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %46 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1It22custom_divide_variableItEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i16, i16* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt22custom_divide_variableItEEvT_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIt22custom_divide_variableItEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt22custom_divide_variableItEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i16, i16* %first, align 2, !tbaa !14
  %16 = load i16, i16* %12, align 2, !tbaa !14
  %17 = udiv i16 %15, %v1
  %18 = udiv i16 %16, %v1
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa26.unr = phi i16 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i16 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i16 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi23.unr = phi i16 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i16 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi23 = phi i16 [ %vec.phi23.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2225 = or i64 %index, 1
  %19 = getelementptr inbounds i16, i16* %first, i64 %index
  %20 = getelementptr inbounds i16, i16* %first, i64 %induction2225
  %21 = load i16, i16* %19, align 2, !tbaa !14
  %22 = load i16, i16* %20, align 2, !tbaa !14
  %23 = udiv i16 %21, %v1
  %24 = udiv i16 %22, %v1
  %25 = add i16 %23, %vec.phi
  %26 = add i16 %24, %vec.phi23
  %index.next = add i64 %index, 2
  %induction2225.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %28 = getelementptr inbounds i16, i16* %first, i64 %induction2225.1
  %29 = load i16, i16* %27, align 2, !tbaa !14
  %30 = load i16, i16* %28, align 2, !tbaa !14
  %31 = udiv i16 %29, %v1
  %32 = udiv i16 %30, %v1
  %33 = add i16 %31, %25
  %34 = add i16 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !190

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi i16 [ %34, %vector.body ]
  %.lcssa29 = phi i16 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa26 = phi i16 [ %.lcssa26.unr, %vector.body.preheader.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i16 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i16 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi24 = phi i16 [ 0, %overflow.checked ], [ %.lcssa26, %middle.block.loopexit ]
  %bin.rdx = add i16 %rdx.vec.exit.phi24, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter27 = and i32 %38, 3
  %lcmp.mod28 = icmp ne i32 %xtraiter27, 0
  br i1 %lcmp.mod28, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.011.reg2mem.0.prol = phi i16 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter27, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.prol
  %40 = load i16, i16* %arrayidx.prol, align 2, !tbaa !14
  %div3.i.prol = udiv i16 %40, %v1
  %add.prol = add i16 %div3.i.prol, %result.011.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !191

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i16 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i16 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.011.reg2mem.0.unr = phi i16 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.011.reg2mem.0 = phi i16 [ %result.011.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %42 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %div3.i = udiv i16 %42, %v1
  %add = add i16 %div3.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.next
  %43 = load i16, i16* %arrayidx.1, align 2, !tbaa !14
  %div3.i.1 = udiv i16 %43, %v1
  %add.1 = add i16 %div3.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.next.1
  %44 = load i16, i16* %arrayidx.2, align 2, !tbaa !14
  %div3.i.2 = udiv i16 %44, %v1
  %add.2 = add i16 %div3.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.next.2
  %45 = load i16, i16* %arrayidx.3, align 2, !tbaa !14
  %div3.i.3 = udiv i16 %45, %v1
  %add.3 = add i16 %div3.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !192

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i16 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i16 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %46 to i16
  %div3.i.i = udiv i16 %conv.i, %v1
  %mul.i = mul i16 %div3.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt22custom_divide_variableItEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt22custom_divide_variableItEEvT_S2_.exit

_Z26check_shifted_variable_sumIt22custom_divide_variableItEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt22custom_divide_variableItEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %49
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %51, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %55 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It31custom_divide_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt31custom_divide_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  %5 = phi i32 [ %31, %_Z26check_shifted_variable_sumIt31custom_divide_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt31custom_divide_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi = phi i16 [ %18, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi24 = phi i16 [ %19, %vector.body ], [ 0, %vector.body.preheader ]
  %induction2326 = or i64 %index, 1
  %6 = getelementptr inbounds i16, i16* %first, i64 %index
  %7 = getelementptr inbounds i16, i16* %first, i64 %induction2326
  %8 = load i16, i16* %6, align 2, !tbaa !14
  %9 = load i16, i16* %7, align 2, !tbaa !14
  %10 = udiv i16 %8, %v1
  %11 = udiv i16 %9, %v1
  %12 = udiv i16 %10, %v2
  %13 = udiv i16 %11, %v2
  %14 = udiv i16 %12, %v3
  %15 = udiv i16 %13, %v3
  %16 = udiv i16 %14, %v4
  %17 = udiv i16 %15, %v4
  %18 = add i16 %16, %vec.phi
  %19 = add i16 %17, %vec.phi24
  %index.next = add i64 %index, 2
  %20 = icmp eq i64 %index.next, %n.vec
  br i1 %20, label %middle.block.loopexit, label %vector.body, !llvm.loop !193

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa28 = phi i16 [ %19, %vector.body ]
  %.lcssa = phi i16 [ %18, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i16 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi25 = phi i16 [ 0, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add i16 %rdx.vec.exit.phi25, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %21 = add i64 %resume.val, 1
  %22 = trunc i64 %21 to i32
  %23 = sub i32 %4, %22
  %24 = sub i32 %count, %22
  %xtraiter = and i32 %23, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %arrayidx.prol = getelementptr inbounds i16, i16* %first, i64 %resume.val
  %25 = load i16, i16* %arrayidx.prol, align 2, !tbaa !14
  %div9.i.prol = udiv i16 %25, %v1
  %div10.i.prol = udiv i16 %div9.i.prol, %v2
  %div.i.prol = udiv i16 %div10.i.prol, %v3
  %div11.i.prol = udiv i16 %div.i.prol, %v4
  %add.prol = add i16 %div11.i.prol, %bin.rdx
  %indvars.iv.next.prol = add nuw nsw i64 %resume.val, 1
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi i16 [ 0, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol, %for.body3.prol ]
  %result.011.reg2mem.0.unr = phi i16 [ %bin.rdx, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %26 = icmp ult i32 %24, 1
  br i1 %26, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.011.reg2mem.0 = phi i16 [ %result.011.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %27 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %div9.i = udiv i16 %27, %v1
  %div10.i = udiv i16 %div9.i, %v2
  %div.i = udiv i16 %div10.i, %v3
  %div11.i = udiv i16 %div.i, %v4
  %add = add i16 %div11.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i16, i16* %first, i64 %indvars.iv.next
  %28 = load i16, i16* %arrayidx.1, align 2, !tbaa !14
  %div9.i.1 = udiv i16 %28, %v1
  %div10.i.1 = udiv i16 %div9.i.1, %v2
  %div.i.1 = udiv i16 %div10.i.1, %v3
  %div11.i.1 = udiv i16 %div.i.1, %v4
  %add.1 = add i16 %div11.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !194

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi i16 [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i16 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %29 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %29 to i16
  %div9.i.i = udiv i16 %conv.i, %v1
  %div10.i.i = udiv i16 %div9.i.i, %v2
  %div.i.i = udiv i16 %div10.i.i, %v3
  %div11.i.i = udiv i16 %div.i.i, %v4
  %mul.i = mul i16 %div11.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt31custom_divide_multiple_variableItEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %30 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %30) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt31custom_divide_multiple_variableItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt31custom_divide_multiple_variableItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %31 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %31
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt31custom_divide_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %32 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %32
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i17 = fdiv double %conv.i16, 1.000000e+06
  %33 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %33, null
  %34 = bitcast %struct.one_result* %33 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end8
  %35 = load i32, i32* @current_test, align 4, !tbaa !5
  %36 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %35, %36
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %37 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %36, %lor.lhs.false.i ]
  %add.i = add nsw i32 %37, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %34, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %38 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %39 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i22 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %39) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %40 = phi %struct.one_result* [ %38, %if.then.if.end5_crit_edge.i ], [ %33, %lor.lhs.false.i ]
  %41 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %35, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %41 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 0
  store double %div.i17, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %41, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It32custom_divide_multiple_variable2ItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %div8.i.i = udiv i16 %v1, %v2
  %div9.i.i = udiv i16 %div8.i.i, %v3
  %div.i.i = udiv i16 %div9.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert27 = insertelement <8 x i16> undef, i16 %div.i.i, i32 0
  %broadcast.splat28 = shufflevector <8 x i16> %broadcast.splatinsert27, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt32custom_divide_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt32custom_divide_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt32custom_divide_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load26.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = add <8 x i16> %wide.load.prol, %broadcast.splat28
  %17 = add <8 x i16> %wide.load26.prol, %broadcast.splat28
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa37.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi25.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi25 = phi <8 x i16> [ %vec.phi25.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load26 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = add <8 x i16> %wide.load, %vec.phi
  %23 = add <8 x i16> %wide.load26, %vec.phi25
  %24 = add <8 x i16> %22, %broadcast.splat28
  %25 = add <8 x i16> %23, %broadcast.splat28
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load26.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = add <8 x i16> %wide.load.1, %24
  %31 = add <8 x i16> %wide.load26.1, %25
  %32 = add <8 x i16> %30, %broadcast.splat28
  %33 = add <8 x i16> %31, %broadcast.splat28
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !195

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa39 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa38 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa37 = phi <8 x i16> [ %.lcssa37.unr, %vector.ph.split ], [ %.lcssa39, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi31 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa37, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi31, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %rdx.shuf35 = shufflevector <8 x i16> %bin.rdx34, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx36 = add <8 x i16> %bin.rdx34, %rdx.shuf35
  %35 = extractelement <8 x i16> %bin.rdx36, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %add.i = add i16 %36, %result.011.reg2mem.0
  %add = add i16 %add.i, %div.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !196

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %add.i.i = add i16 %div.i.i, %conv.i
  %mul.i = mul i16 %add.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt32custom_divide_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt32custom_divide_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt32custom_divide_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt32custom_divide_multiple_variable2ItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i17 = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i18 = add nsw i32 %45, 10
  store i32 %add.i18, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i18 to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %42, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %46 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i23 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i17, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It30custom_mixed_multiple_variableItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %conv1.i.i = zext i16 %v1 to i32
  %conv2.i.i = zext i16 %v2 to i32
  %conv3.i.i = zext i16 %v3 to i32
  %mul.i.i = mul nuw nsw i32 %conv3.i.i, %conv2.i.i
  %conv4.i.i = zext i16 %v4 to i32
  %div.i.i = udiv i32 %mul.i.i, %conv4.i.i
  %add.i.i = sub nsw i32 %conv1.i.i, %div.i.i
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert30 = insertelement <4 x i32> undef, i32 %conv1.i.i, i32 0
  %broadcast.splat31 = shufflevector <4 x i32> %broadcast.splatinsert30, <4 x i32> undef, <4 x i32> zeroinitializer
  %broadcast.splatinsert32 = insertelement <4 x i32> undef, i32 %div.i.i, i32 0
  %broadcast.splat33 = shufflevector <4 x i32> %broadcast.splatinsert32, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt30custom_mixed_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  %4 = phi i32 [ %24, %_Z26check_shifted_variable_sumIt30custom_mixed_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt30custom_mixed_multiple_variableItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body ]
  %vec.phi28 = phi <4 x i16> [ zeroinitializer, %vector.ph ], [ %18, %vector.body ]
  %5 = getelementptr inbounds i16, i16* %first, i64 %index
  %6 = bitcast i16* %5 to <4 x i16>*
  %wide.load = load <4 x i16>, <4 x i16>* %6, align 2, !tbaa !14
  %7 = getelementptr i16, i16* %5, i64 4
  %8 = bitcast i16* %7 to <4 x i16>*
  %wide.load29 = load <4 x i16>, <4 x i16>* %8, align 2, !tbaa !14
  %9 = zext <4 x i16> %wide.load to <4 x i32>
  %10 = zext <4 x i16> %wide.load29 to <4 x i32>
  %11 = add nuw nsw <4 x i32> %9, %broadcast.splat31
  %12 = add nuw nsw <4 x i32> %10, %broadcast.splat31
  %13 = sub nsw <4 x i32> %11, %broadcast.splat33
  %14 = sub nsw <4 x i32> %12, %broadcast.splat33
  %15 = trunc <4 x i32> %13 to <4 x i16>
  %16 = trunc <4 x i32> %14 to <4 x i16>
  %17 = add <4 x i16> %15, %vec.phi
  %18 = add <4 x i16> %16, %vec.phi28
  %index.next = add i64 %index, 8
  %19 = icmp eq i64 %index.next, %n.vec
  br i1 %19, label %middle.block.loopexit, label %vector.body, !llvm.loop !197

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa41 = phi <4 x i16> [ %18, %vector.body ]
  %.lcssa = phi <4 x i16> [ %17, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi36 = phi <4 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa41, %middle.block.loopexit ]
  %bin.rdx = add <4 x i16> %rdx.vec.exit.phi36, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i16> %bin.rdx, <4 x i16> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx37 = add <4 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf38 = shufflevector <4 x i16> %bin.rdx37, <4 x i16> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx39 = add <4 x i16> %bin.rdx37, %rdx.shuf38
  %20 = extractelement <4 x i16> %bin.rdx39, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %20, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %21 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %conv.i = zext i16 %21 to i32
  %add.i = add nuw nsw i32 %conv.i, %conv1.i.i
  %sub.i = sub nsw i32 %add.i, %div.i.i
  %conv5.i = trunc i32 %sub.i to i16
  %add = add i16 %conv5.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !198

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %20, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %22 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i19 = fptoui double %22 to i16
  %conv.i.i = zext i16 %conv.i19 to i32
  %sub.i.i = add i32 %add.i.i, %conv.i.i
  %conv5.i.i = trunc i32 %sub.i.i to i16
  %mul.i20 = mul i16 %conv5.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i20, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt30custom_mixed_multiple_variableItEEvT_S2_S2_S2_S2_.exit, label %if.then.i22

if.then.i22:                                      ; preds = %for.end
  %23 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %23) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt30custom_mixed_multiple_variableItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt30custom_mixed_multiple_variableItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i22
  %24 = phi i32 [ %4, %for.end ], [ %.pre, %if.then.i22 ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %24
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt30custom_mixed_multiple_variableItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i23 = tail call i64 @clock() #5
  store i64 %call.i23, i64* @end_time, align 8, !tbaa !11
  %25 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i24 = sub nsw i64 %call.i23, %25
  %conv.i25 = sitofp i64 %sub.i24 to double
  %div.i26 = fdiv double %conv.i25, 1.000000e+06
  %26 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %26, null
  %27 = bitcast %struct.one_result* %26 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i

lor.lhs.false.i:                                  ; preds = %for.end8
  %28 = load i32, i32* @current_test, align 4, !tbaa !5
  %29 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %28, %29
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i

if.then.i:                                        ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %30 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %29, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %30, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %27, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i
  %31 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i
  %32 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %32) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %33 = phi %struct.one_result* [ %31, %if.then.if.end5_crit_edge.i ], [ %26, %lor.lhs.false.i ]
  %34 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %28, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %34 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %33, i64 %idxprom.i, i32 0
  store double %div.i26, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %33, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %34, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1It19custom_variable_andItEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat26 = shufflevector <8 x i16> %broadcast.splatinsert25, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt19custom_variable_andItEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt19custom_variable_andItEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt19custom_variable_andItEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load24.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = and <8 x i16> %wide.load.prol, %broadcast.splat26
  %17 = and <8 x i16> %wide.load24.prol, %broadcast.splat26
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa35.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <8 x i16> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load24 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = and <8 x i16> %wide.load, %broadcast.splat26
  %23 = and <8 x i16> %wide.load24, %broadcast.splat26
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi23
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load24.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = and <8 x i16> %wide.load.1, %broadcast.splat26
  %31 = and <8 x i16> %wide.load24.1, %broadcast.splat26
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !199

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa37 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa36 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa35 = phi <8 x i16> [ %.lcssa35.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa35, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <8 x i16> %bin.rdx30, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %35 = extractelement <8 x i16> %bin.rdx34, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %and3.i = and i16 %36, %v1
  %add = add i16 %and3.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !200

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %and3.i.i = and i16 %conv.i, %v1
  %mul.i = mul i16 %and3.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt19custom_variable_andItEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt19custom_variable_andItEEvT_S2_.exit

_Z26check_shifted_variable_sumIt19custom_variable_andItEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt19custom_variable_andItEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It28custom_multiple_variable_andItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %and9.i.i = and i16 %v2, %v1
  %and310.i.i = and i16 %and9.i.i, %v3
  %and511.i.i = and i16 %and310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <8 x i16> undef, i16 %and511.i.i, i32 0
  %broadcast.splat26 = shufflevector <8 x i16> %broadcast.splatinsert25, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt28custom_multiple_variable_andItEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt28custom_multiple_variable_andItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt28custom_multiple_variable_andItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load24.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = and <8 x i16> %broadcast.splat26, %wide.load.prol
  %17 = and <8 x i16> %broadcast.splat26, %wide.load24.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa35.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <8 x i16> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load24 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = and <8 x i16> %broadcast.splat26, %wide.load
  %23 = and <8 x i16> %broadcast.splat26, %wide.load24
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi23
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load24.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = and <8 x i16> %broadcast.splat26, %wide.load.1
  %31 = and <8 x i16> %broadcast.splat26, %wide.load24.1
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !201

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa37 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa36 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa35 = phi <8 x i16> [ %.lcssa35.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa35, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <8 x i16> %bin.rdx30, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %35 = extractelement <8 x i16> %bin.rdx34, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %and712.i = and i16 %and511.i.i, %36
  %add = add i16 %and712.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !202

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %and712.i.i = and i16 %and511.i.i, %conv.i
  %mul.i = mul i16 %and712.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt28custom_multiple_variable_andItEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt28custom_multiple_variable_andItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt28custom_multiple_variable_andItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt28custom_multiple_variable_andItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1It18custom_variable_orItEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat26 = shufflevector <8 x i16> %broadcast.splatinsert25, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt18custom_variable_orItEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt18custom_variable_orItEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt18custom_variable_orItEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load24.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = or <8 x i16> %wide.load.prol, %broadcast.splat26
  %17 = or <8 x i16> %wide.load24.prol, %broadcast.splat26
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa35.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <8 x i16> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load24 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = or <8 x i16> %wide.load, %broadcast.splat26
  %23 = or <8 x i16> %wide.load24, %broadcast.splat26
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi23
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load24.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = or <8 x i16> %wide.load.1, %broadcast.splat26
  %31 = or <8 x i16> %wide.load24.1, %broadcast.splat26
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !203

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa37 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa36 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa35 = phi <8 x i16> [ %.lcssa35.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa35, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <8 x i16> %bin.rdx30, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %35 = extractelement <8 x i16> %bin.rdx34, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %or3.i = or i16 %36, %v1
  %add = add i16 %or3.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !204

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %or3.i.i = or i16 %conv.i, %v1
  %mul.i = mul i16 %or3.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt18custom_variable_orItEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt18custom_variable_orItEEvT_S2_.exit

_Z26check_shifted_variable_sumIt18custom_variable_orItEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt18custom_variable_orItEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It27custom_multiple_variable_orItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %or9.i.i = or i16 %v2, %v1
  %or310.i.i = or i16 %or9.i.i, %v3
  %or511.i.i = or i16 %or310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <8 x i16> undef, i16 %or511.i.i, i32 0
  %broadcast.splat26 = shufflevector <8 x i16> %broadcast.splatinsert25, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt27custom_multiple_variable_orItEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt27custom_multiple_variable_orItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt27custom_multiple_variable_orItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load24.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = or <8 x i16> %broadcast.splat26, %wide.load.prol
  %17 = or <8 x i16> %broadcast.splat26, %wide.load24.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa35.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <8 x i16> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load24 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = or <8 x i16> %broadcast.splat26, %wide.load
  %23 = or <8 x i16> %broadcast.splat26, %wide.load24
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi23
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load24.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = or <8 x i16> %broadcast.splat26, %wide.load.1
  %31 = or <8 x i16> %broadcast.splat26, %wide.load24.1
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !205

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa37 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa36 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa35 = phi <8 x i16> [ %.lcssa35.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa35, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <8 x i16> %bin.rdx30, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %35 = extractelement <8 x i16> %bin.rdx34, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %or712.i = or i16 %or511.i.i, %36
  %add = add i16 %or712.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !206

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %or712.i.i = or i16 %or511.i.i, %conv.i
  %mul.i = mul i16 %or712.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt27custom_multiple_variable_orItEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt27custom_multiple_variable_orItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt27custom_multiple_variable_orItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt27custom_multiple_variable_orItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1It19custom_variable_xorItEEvPT_iS2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <8 x i16> undef, i16 %v1, i32 0
  %broadcast.splat26 = shufflevector <8 x i16> %broadcast.splatinsert25, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt19custom_variable_xorItEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt19custom_variable_xorItEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt19custom_variable_xorItEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load24.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = xor <8 x i16> %wide.load.prol, %broadcast.splat26
  %17 = xor <8 x i16> %wide.load24.prol, %broadcast.splat26
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa35.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <8 x i16> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load24 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = xor <8 x i16> %wide.load, %broadcast.splat26
  %23 = xor <8 x i16> %wide.load24, %broadcast.splat26
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi23
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load24.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = xor <8 x i16> %wide.load.1, %broadcast.splat26
  %31 = xor <8 x i16> %wide.load24.1, %broadcast.splat26
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !207

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa37 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa36 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa35 = phi <8 x i16> [ %.lcssa35.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa35, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <8 x i16> %bin.rdx30, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %35 = extractelement <8 x i16> %bin.rdx34, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %xor3.i = xor i16 %36, %v1
  %add = add i16 %xor3.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !208

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %xor3.i.i = xor i16 %conv.i, %v1
  %mul.i = mul i16 %xor3.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt19custom_variable_xorItEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt19custom_variable_xorItEEvT_S2_.exit

_Z26check_shifted_variable_sumIt19custom_variable_xorItEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt19custom_variable_xorItEEvT_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4It28custom_multiple_variable_xorItEEvPT_iS2_S2_S2_S2_PKc(i16* nocapture readonly %first, i32 %count, i16 zeroext %v1, i16 zeroext %v2, i16 zeroext %v3, i16 zeroext %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp13 = icmp sgt i32 %0, 0
  br i1 %cmp13, label %for.cond1.preheader.preheader, label %for.end8

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp210 = icmp sgt i32 %count, 0
  %xor9.i.i = xor i16 %v2, %v1
  %xor310.i.i = xor i16 %xor9.i.i, %v3
  %xor511.i.i = xor i16 %xor310.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 4
  %7 = mul i64 %6, 16
  %8 = add i64 %7, -16
  %9 = lshr i64 %8, 4
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934576
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert25 = insertelement <8 x i16> undef, i16 %xor511.i.i, i32 0
  %broadcast.splat26 = shufflevector <8 x i16> %broadcast.splatinsert25, <8 x i16> undef, <8 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i16* %first to <8 x i16>*
  %12 = getelementptr i16, i16* %first, i64 8
  %13 = bitcast i16* %12 to <8 x i16>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIt28custom_multiple_variable_xorItEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIt28custom_multiple_variable_xorItEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.014 = phi i32 [ %inc7, %_Z26check_shifted_variable_sumIt28custom_multiple_variable_xorItEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp210, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <8 x i16>, <8 x i16>* %11, align 2, !tbaa !14
  %wide.load24.prol = load <8 x i16>, <8 x i16>* %13, align 2, !tbaa !14
  %16 = xor <8 x i16> %broadcast.splat26, %wide.load.prol
  %17 = xor <8 x i16> %broadcast.splat26, %wide.load24.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa35.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 16, %vector.body.prol ]
  %vec.phi.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi23.unr = phi <8 x i16> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <8 x i16> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi23 = phi <8 x i16> [ %vec.phi23.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i16, i16* %first, i64 %index
  %19 = bitcast i16* %18 to <8 x i16>*
  %wide.load = load <8 x i16>, <8 x i16>* %19, align 2, !tbaa !14
  %20 = getelementptr i16, i16* %18, i64 8
  %21 = bitcast i16* %20 to <8 x i16>*
  %wide.load24 = load <8 x i16>, <8 x i16>* %21, align 2, !tbaa !14
  %22 = xor <8 x i16> %broadcast.splat26, %wide.load
  %23 = xor <8 x i16> %broadcast.splat26, %wide.load24
  %24 = add <8 x i16> %22, %vec.phi
  %25 = add <8 x i16> %23, %vec.phi23
  %index.next = add i64 %index, 16
  %26 = getelementptr inbounds i16, i16* %first, i64 %index.next
  %27 = bitcast i16* %26 to <8 x i16>*
  %wide.load.1 = load <8 x i16>, <8 x i16>* %27, align 2, !tbaa !14
  %28 = getelementptr i16, i16* %26, i64 8
  %29 = bitcast i16* %28 to <8 x i16>*
  %wide.load24.1 = load <8 x i16>, <8 x i16>* %29, align 2, !tbaa !14
  %30 = xor <8 x i16> %broadcast.splat26, %wide.load.1
  %31 = xor <8 x i16> %broadcast.splat26, %wide.load24.1
  %32 = add <8 x i16> %30, %24
  %33 = add <8 x i16> %31, %25
  %index.next.1 = add i64 %index.next, 16
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !209

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa37 = phi <8 x i16> [ %33, %vector.body ]
  %.lcssa36 = phi <8 x i16> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa35 = phi <8 x i16> [ %.lcssa35.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <8 x i16> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi29 = phi <8 x i16> [ zeroinitializer, %overflow.checked ], [ %.lcssa35, %middle.block.loopexit ]
  %bin.rdx = add <8 x i16> %rdx.vec.exit.phi29, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <8 x i16> %bin.rdx, %rdx.shuf
  %rdx.shuf31 = shufflevector <8 x i16> %bin.rdx30, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx32 = add <8 x i16> %bin.rdx30, %rdx.shuf31
  %rdx.shuf33 = shufflevector <8 x i16> %bin.rdx32, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx34 = add <8 x i16> %bin.rdx32, %rdx.shuf33
  %35 = extractelement <8 x i16> %bin.rdx34, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.011.reg2mem.0 = phi i16 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i16, i16* %first, i64 %indvars.iv
  %36 = load i16, i16* %arrayidx, align 2, !tbaa !14
  %xor712.i = xor i16 %xor511.i.i, %36
  %add = add i16 %xor712.i, %result.011.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !210

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i16 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i16 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i16
  %xor712.i.i = xor i16 %xor511.i.i, %conv.i
  %mul.i = mul i16 %xor712.i.i, 8000
  %cmp.i.i = icmp eq i16 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIt28custom_multiple_variable_xorItEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIt28custom_multiple_variable_xorItEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIt28custom_multiple_variable_xorItEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc7 = add nuw nsw i32 %i.014, 1
  %cmp = icmp slt i32 %inc7, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end8.loopexit

for.end8.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIt28custom_multiple_variable_xorItEEvT_S2_S2_S2_S2_.exit
  br label %for.end8

for.end8:                                         ; preds = %for.end8.loopexit, %entry
  %call.i15 = tail call i64 @clock() #5
  store i64 %call.i15, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i15, %40
  %conv.i16 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i16, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end8
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end8
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i21 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ii19custom_add_variableIiEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %broadcast.splat24, %wide.load.prol
  %17 = add <4 x i32> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = add <4 x i32> %vec.phi, %broadcast.splat24
  %23 = add <4 x i32> %vec.phi21, %broadcast.splat24
  %24 = add <4 x i32> %22, %wide.load
  %25 = add <4 x i32> %23, %wide.load22
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = add <4 x i32> %24, %broadcast.splat24
  %31 = add <4 x i32> %25, %broadcast.splat24
  %32 = add <4 x i32> %30, %wide.load.1
  %33 = add <4 x i32> %31, %wide.load22.1
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !211

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add.i = add i32 %result.09.reg2mem.0, %v1
  %add = add i32 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !212

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %add.i.i = add nsw i32 %conv.i, %v1
  %mul.i = mul nsw i32 %add.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit

_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %45, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1Ii19custom_add_variableIiEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end7

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul = mul nsw i32 %v1, %count
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = sext i32 %count to i64
  %4 = lshr i64 %3, 3
  %5 = mul i64 %4, 8
  %6 = add i64 %5, -8
  %7 = lshr i64 %6, 3
  %8 = add i64 %7, 1
  %backedge.overflow = icmp eq i32 %count, 0
  %n.vec = and i64 %2, -8
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %8, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %9 = icmp ult i64 %7, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit
  %10 = phi i32 [ %45, %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc6, %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %polly.stmt.for.inc.preheader, label %for.end

polly.stmt.for.inc.preheader:                     ; preds = %for.cond1.preheader
  br i1 %backedge.overflow, label %polly.stmt.for.inc.preheader28, label %overflow.checked

polly.stmt.for.inc.preheader28:                   ; preds = %middle.block, %polly.stmt.for.inc.preheader
  %result.09.reg2mem.0.ph = phi i32 [ 0, %polly.stmt.for.inc.preheader ], [ %42, %middle.block ]
  %polly.indvar.ph = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %resume.val, %middle.block ]
  br label %polly.stmt.for.inc

overflow.checked:                                 ; preds = %polly.stmt.for.inc.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.preheader.split

vector.body.prol.preheader:                       ; preds = %vector.body.preheader
  br label %vector.body.prol

vector.body.prol:                                 ; preds = %vector.body.prol.preheader, %vector.body.prol
  %index.prol = phi i64 [ %index.next.prol, %vector.body.prol ], [ 0, %vector.body.prol.preheader ]
  %vec.phi.prol = phi <4 x i32> [ %15, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %vec.phi19.prol = phi <4 x i32> [ %16, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %vector.body.prol ], [ %xtraiter, %vector.body.prol.preheader ]
  %11 = getelementptr i32, i32* %first, i64 %index.prol
  %12 = bitcast i32* %11 to <4 x i32>*
  %wide.load.prol = load <4 x i32>, <4 x i32>* %12, align 4, !alias.scope !213, !noalias !215
  %13 = getelementptr i32, i32* %11, i64 4
  %14 = bitcast i32* %13 to <4 x i32>*
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %14, align 4, !alias.scope !213, !noalias !215
  %15 = add nsw <4 x i32> %wide.load.prol, %vec.phi.prol
  %16 = add nsw <4 x i32> %wide.load21.prol, %vec.phi19.prol
  %index.next.prol = add i64 %index.prol, 8
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %vector.body.prol, label %vector.body.preheader.split.loopexit, !llvm.loop !220

vector.body.preheader.split.loopexit:             ; preds = %vector.body.prol
  %index.next.prol.lcssa = phi i64 [ %index.next.prol, %vector.body.prol ]
  %.lcssa33 = phi <4 x i32> [ %16, %vector.body.prol ]
  %.lcssa32 = phi <4 x i32> [ %15, %vector.body.prol ]
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.preheader.split.loopexit, %vector.body.preheader
  %.lcssa29.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa33, %vector.body.preheader.split.loopexit ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa32, %vector.body.preheader.split.loopexit ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ %index.next.prol.lcssa, %vector.body.preheader.split.loopexit ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa32, %vector.body.preheader.split.loopexit ]
  %vec.phi19.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa33, %vector.body.preheader.split.loopexit ]
  br i1 %9, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.3, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %39, %vector.body ]
  %vec.phi19 = phi <4 x i32> [ %vec.phi19.unr, %vector.body.preheader.split.split ], [ %40, %vector.body ]
  %17 = getelementptr i32, i32* %first, i64 %index
  %18 = bitcast i32* %17 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %18, align 4, !alias.scope !213, !noalias !215
  %19 = getelementptr i32, i32* %17, i64 4
  %20 = bitcast i32* %19 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %20, align 4, !alias.scope !213, !noalias !215
  %21 = add nsw <4 x i32> %wide.load, %vec.phi
  %22 = add nsw <4 x i32> %wide.load21, %vec.phi19
  %index.next = add i64 %index, 8
  %23 = getelementptr i32, i32* %first, i64 %index.next
  %24 = bitcast i32* %23 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %24, align 4, !alias.scope !213, !noalias !215
  %25 = getelementptr i32, i32* %23, i64 4
  %26 = bitcast i32* %25 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %26, align 4, !alias.scope !213, !noalias !215
  %27 = add nsw <4 x i32> %wide.load.1, %21
  %28 = add nsw <4 x i32> %wide.load21.1, %22
  %index.next.1 = add i64 %index.next, 8
  %29 = getelementptr i32, i32* %first, i64 %index.next.1
  %30 = bitcast i32* %29 to <4 x i32>*
  %wide.load.2 = load <4 x i32>, <4 x i32>* %30, align 4, !alias.scope !213, !noalias !215
  %31 = getelementptr i32, i32* %29, i64 4
  %32 = bitcast i32* %31 to <4 x i32>*
  %wide.load21.2 = load <4 x i32>, <4 x i32>* %32, align 4, !alias.scope !213, !noalias !215
  %33 = add nsw <4 x i32> %wide.load.2, %27
  %34 = add nsw <4 x i32> %wide.load21.2, %28
  %index.next.2 = add i64 %index.next.1, 8
  %35 = getelementptr i32, i32* %first, i64 %index.next.2
  %36 = bitcast i32* %35 to <4 x i32>*
  %wide.load.3 = load <4 x i32>, <4 x i32>* %36, align 4, !alias.scope !213, !noalias !215
  %37 = getelementptr i32, i32* %35, i64 4
  %38 = bitcast i32* %37 to <4 x i32>*
  %wide.load21.3 = load <4 x i32>, <4 x i32>* %38, align 4, !alias.scope !213, !noalias !215
  %39 = add nsw <4 x i32> %wide.load.3, %33
  %40 = add nsw <4 x i32> %wide.load21.3, %34
  %index.next.3 = add i64 %index.next.2, 8
  %41 = icmp eq i64 %index.next.3, %n.vec
  br i1 %41, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !221

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa31 = phi <4 x i32> [ %40, %vector.body ]
  %.lcssa30 = phi <4 x i32> [ %39, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa29 = phi <4 x i32> [ %.lcssa29.unr, %vector.body.preheader.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi24 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa29, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi24, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx25 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf26 = shufflevector <4 x i32> %bin.rdx25, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx25, %rdx.shuf26
  %42 = extractelement <4 x i32> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %2, %resume.val
  br i1 %cmp.n, label %for.end, label %polly.stmt.for.inc.preheader28

for.end.loopexit:                                 ; preds = %polly.stmt.for.inc
  %p_add.lcssa = phi i32 [ %p_add, %polly.stmt.for.inc ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %42, %middle.block ], [ %p_add.lcssa, %for.end.loopexit ]
  %add4 = add nsw i32 %result.0.lcssa.reg2mem.0, %mul
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %43 to i32
  %add.i.i = add nsw i32 %conv.i, %v1
  %mul.i = mul nsw i32 %add.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %add4
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit

_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %10, %for.end ], [ %.pre, %if.then.i ]
  %inc6 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc6, %45
  br i1 %cmp, label %for.cond1.preheader, label %for.end7.loopexit

for.end7.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi19custom_add_variableIiEEvT_S2_.exit
  br label %for.end7

for.end7:                                         ; preds = %for.end7.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %46
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end7
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end7
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i = add nsw i32 %51, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %48, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %52 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void

polly.stmt.for.inc:                               ; preds = %polly.stmt.for.inc.preheader28, %polly.stmt.for.inc
  %result.09.reg2mem.0 = phi i32 [ %p_add, %polly.stmt.for.inc ], [ %result.09.reg2mem.0.ph, %polly.stmt.for.inc.preheader28 ]
  %polly.indvar = phi i64 [ %polly.indvar_next, %polly.stmt.for.inc ], [ %polly.indvar.ph, %polly.stmt.for.inc.preheader28 ]
  %scevgep = getelementptr i32, i32* %first, i64 %polly.indvar
  %_p_scalar_ = load i32, i32* %scevgep, align 4, !alias.scope !213, !noalias !215
  %p_add = add nsw i32 %_p_scalar_, %result.09.reg2mem.0
  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
  %exitcond = icmp eq i64 %polly.indvar_next, %1
  br i1 %exitcond, label %for.end.loopexit, label %polly.stmt.for.inc, !llvm.loop !222
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii28custom_add_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %add.i.i = add i32 %v2, %v1
  %add1.i.i = add i32 %add.i.i, %v3
  %add2.i.i = add i32 %add1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %add2.i.i, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi28custom_add_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi28custom_add_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi28custom_add_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %broadcast.splat24, %wide.load.prol
  %17 = add <4 x i32> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = add <4 x i32> %broadcast.splat24, %vec.phi
  %23 = add <4 x i32> %broadcast.splat24, %vec.phi21
  %24 = add <4 x i32> %22, %wide.load
  %25 = add <4 x i32> %23, %wide.load22
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = add <4 x i32> %broadcast.splat24, %24
  %31 = add <4 x i32> %broadcast.splat24, %25
  %32 = add <4 x i32> %30, %wide.load.1
  %33 = add <4 x i32> %31, %wide.load22.1
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !223

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add3.i = add i32 %add2.i.i, %result.09.reg2mem.0
  %add = add i32 %add3.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !224

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %add3.i.i = add i32 %add2.i.i, %conv.i
  %mul.i = mul nsw i32 %add3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi28custom_add_multiple_variableIiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi28custom_add_multiple_variableIiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi28custom_add_multiple_variableIiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi28custom_add_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %45, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ii19custom_sub_variableIiEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi19custom_sub_variableIiEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi19custom_sub_variableIiEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi19custom_sub_variableIiEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = sub nsw <4 x i32> %wide.load.prol, %broadcast.splat24
  %17 = sub nsw <4 x i32> %wide.load22.prol, %broadcast.splat24
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = sub nsw <4 x i32> %wide.load, %broadcast.splat24
  %23 = sub nsw <4 x i32> %wide.load22, %broadcast.splat24
  %24 = add nsw <4 x i32> %22, %vec.phi
  %25 = add nsw <4 x i32> %23, %vec.phi21
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = sub nsw <4 x i32> %wide.load.1, %broadcast.splat24
  %31 = sub nsw <4 x i32> %wide.load22.1, %broadcast.splat24
  %32 = add nsw <4 x i32> %30, %24
  %33 = add nsw <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !225

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %sub.i = sub nsw i32 %36, %v1
  %add = add nsw i32 %sub.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !226

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %sub.i.i = sub nsw i32 %conv.i, %v1
  %mul.i = mul nsw i32 %sub.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi19custom_sub_variableIiEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi19custom_sub_variableIiEEvT_S2_.exit

_Z26check_shifted_variable_sumIi19custom_sub_variableIiEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi19custom_sub_variableIiEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %40
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii28custom_sub_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %sum = add i32 %v2, %v1
  %sum20 = add i32 %sum, %v3
  %sum21 = add i32 %sum20, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <4 x i32> undef, i32 %sum21, i32 0
  %broadcast.splat29 = shufflevector <4 x i32> %broadcast.splatinsert28, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = sub <4 x i32> zeroinitializer, %broadcast.splat29
  %15 = sub <4 x i32> zeroinitializer, %broadcast.splat29
  %16 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi28custom_sub_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  %17 = phi i32 [ %41, %_Z26check_shifted_variable_sumIi28custom_sub_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi28custom_sub_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load27.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %18 = add <4 x i32> %14, %wide.load.prol
  %19 = add <4 x i32> %15, %wide.load27.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa36.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi26.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %16, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %34, %vector.body ]
  %vec.phi26 = phi <4 x i32> [ %vec.phi26.unr, %vector.ph.split.split ], [ %35, %vector.body ]
  %20 = getelementptr inbounds i32, i32* %first, i64 %index
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = getelementptr i32, i32* %20, i64 4
  %23 = bitcast i32* %22 to <4 x i32>*
  %wide.load27 = load <4 x i32>, <4 x i32>* %23, align 4, !tbaa !5
  %24 = sub <4 x i32> %vec.phi, %broadcast.splat29
  %25 = sub <4 x i32> %vec.phi26, %broadcast.splat29
  %26 = add <4 x i32> %24, %wide.load
  %27 = add <4 x i32> %25, %wide.load27
  %index.next = add i64 %index, 8
  %28 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = getelementptr i32, i32* %28, i64 4
  %31 = bitcast i32* %30 to <4 x i32>*
  %wide.load27.1 = load <4 x i32>, <4 x i32>* %31, align 4, !tbaa !5
  %32 = sub <4 x i32> %26, %broadcast.splat29
  %33 = sub <4 x i32> %27, %broadcast.splat29
  %34 = add <4 x i32> %32, %wide.load.1
  %35 = add <4 x i32> %33, %wide.load27.1
  %index.next.1 = add i64 %index.next, 8
  %36 = icmp eq i64 %index.next.1, %n.vec
  br i1 %36, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !227

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa38 = phi <4 x i32> [ %35, %vector.body ]
  %.lcssa37 = phi <4 x i32> [ %34, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa36 = phi <4 x i32> [ %.lcssa36.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa36, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx33 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <4 x i32> %bin.rdx33, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <4 x i32> %bin.rdx33, %rdx.shuf34
  %37 = extractelement <4 x i32> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %37, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %38 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %sub3.i = sub i32 %result.09.reg2mem.0, %sum21
  %add = add i32 %sub3.i, %38
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !228

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %37, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %39 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %39 to i32
  %sub3.i.i = sub i32 %conv.i, %sum21
  %mul.i = mul nsw i32 %sub3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi28custom_sub_multiple_variableIiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi28custom_sub_multiple_variableIiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi28custom_sub_multiple_variableIiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %17, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi28custom_sub_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %42
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %44, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %48 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ii24custom_multiply_variableIiEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i32 %v1, 8000
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi24custom_multiply_variableIiEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi24custom_multiply_variableIiEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi24custom_multiply_variableIiEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = mul nsw <4 x i32> %wide.load.prol, %broadcast.splat24
  %17 = mul nsw <4 x i32> %wide.load22.prol, %broadcast.splat24
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = mul nsw <4 x i32> %wide.load, %broadcast.splat24
  %23 = mul nsw <4 x i32> %wide.load22, %broadcast.splat24
  %24 = add nsw <4 x i32> %22, %vec.phi
  %25 = add nsw <4 x i32> %23, %vec.phi21
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = mul nsw <4 x i32> %wide.load.1, %broadcast.splat24
  %31 = mul nsw <4 x i32> %wide.load22.1, %broadcast.splat24
  %32 = add nsw <4 x i32> %30, %24
  %33 = add nsw <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !229

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %mul.i = mul nsw i32 %36, %v1
  %add = add nsw i32 %mul.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !230

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %mul.i13 = mul i32 %mul.i.i, %conv.i
  %cmp.i.i = icmp eq i32 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi24custom_multiply_variableIiEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi24custom_multiply_variableIiEEvT_S2_.exit

_Z26check_shifted_variable_sumIi24custom_multiply_variableIiEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi24custom_multiply_variableIiEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %40
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii33custom_multiply_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i32 %v1, 8000
  %mul1.i.i = mul i32 %mul.i.i, %v2
  %mul2.i.i = mul i32 %mul1.i.i, %v3
  %mul3.i.i = mul i32 %mul2.i.i, %v4
  %mul.i = mul i32 %v2, %v1
  %mul1.i = mul i32 %mul.i, %v3
  %mul2.i = mul i32 %mul1.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %mul2.i, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi33custom_multiply_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi33custom_multiply_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi33custom_multiply_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = mul <4 x i32> %broadcast.splat24, %wide.load.prol
  %17 = mul <4 x i32> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = mul <4 x i32> %broadcast.splat24, %wide.load
  %23 = mul <4 x i32> %broadcast.splat24, %wide.load22
  %24 = add nsw <4 x i32> %22, %vec.phi
  %25 = add nsw <4 x i32> %23, %vec.phi21
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = mul <4 x i32> %broadcast.splat24, %wide.load.1
  %31 = mul <4 x i32> %broadcast.splat24, %wide.load22.1
  %32 = add nsw <4 x i32> %30, %24
  %33 = add nsw <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !231

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %mul3.i = mul i32 %mul2.i, %36
  %add = add nsw i32 %mul3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !232

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %mul.i13 = mul i32 %mul3.i.i, %conv.i
  %cmp.i.i = icmp eq i32 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi33custom_multiply_multiple_variableIiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi33custom_multiply_multiple_variableIiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi33custom_multiply_multiple_variableIiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi33custom_multiply_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %40
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii34custom_multiply_multiple_variable2IiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul nsw i32 %v2, %v1
  %mul1.i.i = mul nsw i32 %mul.i.i, %v3
  %mul2.i.i = mul nsw i32 %mul1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert24 = insertelement <4 x i32> undef, i32 %mul2.i.i, i32 0
  %broadcast.splat25 = shufflevector <4 x i32> %broadcast.splatinsert24, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi34custom_multiply_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi34custom_multiply_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi34custom_multiply_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load23.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %broadcast.splat25, %wide.load.prol
  %17 = add <4 x i32> %broadcast.splat25, %wide.load23.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa32.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi22.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi22 = phi <4 x i32> [ %vec.phi22.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load23 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = add <4 x i32> %vec.phi, %broadcast.splat25
  %23 = add <4 x i32> %vec.phi22, %broadcast.splat25
  %24 = add <4 x i32> %22, %wide.load
  %25 = add <4 x i32> %23, %wide.load23
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load23.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = add <4 x i32> %24, %broadcast.splat25
  %31 = add <4 x i32> %25, %broadcast.splat25
  %32 = add <4 x i32> %30, %wide.load.1
  %33 = add <4 x i32> %31, %wide.load23.1
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !233

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa34 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa33 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa32 = phi <4 x i32> [ %.lcssa32.unr, %vector.ph.split ], [ %.lcssa34, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa32, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf30 = shufflevector <4 x i32> %bin.rdx29, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <4 x i32> %bin.rdx29, %rdx.shuf30
  %35 = extractelement <4 x i32> %bin.rdx31, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add.i = add i32 %result.09.reg2mem.0, %mul2.i.i
  %add = add i32 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !234

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %add.i.i = add nsw i32 %conv.i, %mul2.i.i
  %mul.i13 = mul nsw i32 %add.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi34custom_multiply_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi34custom_multiply_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi34custom_multiply_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi34custom_multiply_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %40
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %45, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ii22custom_divide_variableIiEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i32, i32* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi22custom_divide_variableIiEEvT_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIi22custom_divide_variableIiEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi22custom_divide_variableIiEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i32, i32* %first, align 4, !tbaa !5
  %16 = load i32, i32* %12, align 4, !tbaa !5
  %17 = sdiv i32 %15, %v1
  %18 = sdiv i32 %16, %v1
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa24.unr = phi i32 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i32 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i32 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi21.unr = phi i32 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i32 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi21 = phi i32 [ %vec.phi21.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2023 = or i64 %index, 1
  %19 = getelementptr inbounds i32, i32* %first, i64 %index
  %20 = getelementptr inbounds i32, i32* %first, i64 %induction2023
  %21 = load i32, i32* %19, align 4, !tbaa !5
  %22 = load i32, i32* %20, align 4, !tbaa !5
  %23 = sdiv i32 %21, %v1
  %24 = sdiv i32 %22, %v1
  %25 = add nsw i32 %23, %vec.phi
  %26 = add nsw i32 %24, %vec.phi21
  %index.next = add i64 %index, 2
  %induction2023.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %28 = getelementptr inbounds i32, i32* %first, i64 %induction2023.1
  %29 = load i32, i32* %27, align 4, !tbaa !5
  %30 = load i32, i32* %28, align 4, !tbaa !5
  %31 = sdiv i32 %29, %v1
  %32 = sdiv i32 %30, %v1
  %33 = add nsw i32 %31, %25
  %34 = add nsw i32 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !235

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa28 = phi i32 [ %34, %vector.body ]
  %.lcssa27 = phi i32 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa24 = phi i32 [ %.lcssa24.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i32 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa27, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i32 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i32 [ 0, %overflow.checked ], [ %.lcssa24, %middle.block.loopexit ]
  %bin.rdx = add i32 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter25 = and i32 %38, 3
  %lcmp.mod26 = icmp ne i32 %xtraiter25, 0
  br i1 %lcmp.mod26, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi i32 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter25, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.prol
  %40 = load i32, i32* %arrayidx.prol, align 4, !tbaa !5
  %div.i.prol = sdiv i32 %40, %v1
  %add.prol = add nsw i32 %div.i.prol, %result.09.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !236

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i32 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i32 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi i32 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi i32 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %42 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %div.i = sdiv i32 %42, %v1
  %add = add nsw i32 %div.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.next
  %43 = load i32, i32* %arrayidx.1, align 4, !tbaa !5
  %div.i.1 = sdiv i32 %43, %v1
  %add.1 = add nsw i32 %div.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.next.1
  %44 = load i32, i32* %arrayidx.2, align 4, !tbaa !5
  %div.i.2 = sdiv i32 %44, %v1
  %add.2 = add nsw i32 %div.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.next.2
  %45 = load i32, i32* %arrayidx.3, align 4, !tbaa !5
  %div.i.3 = sdiv i32 %45, %v1
  %add.3 = add nsw i32 %div.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !237

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i32 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i32 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %46 to i32
  %div.i.i = sdiv i32 %conv.i, %v1
  %mul.i = mul nsw i32 %div.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi22custom_divide_variableIiEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi22custom_divide_variableIiEEvT_S2_.exit

_Z26check_shifted_variable_sumIi22custom_divide_variableIiEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi22custom_divide_variableIiEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %49
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %51, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %55 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii31custom_divide_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi31custom_divide_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  %5 = phi i32 [ %31, %_Z26check_shifted_variable_sumIi31custom_divide_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi31custom_divide_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi = phi i32 [ %18, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi21 = phi i32 [ %19, %vector.body ], [ 0, %vector.body.preheader ]
  %induction2023 = or i64 %index, 1
  %6 = getelementptr inbounds i32, i32* %first, i64 %index
  %7 = getelementptr inbounds i32, i32* %first, i64 %induction2023
  %8 = load i32, i32* %6, align 4, !tbaa !5
  %9 = load i32, i32* %7, align 4, !tbaa !5
  %10 = sdiv i32 %8, %v1
  %11 = sdiv i32 %9, %v1
  %12 = sdiv i32 %10, %v2
  %13 = sdiv i32 %11, %v2
  %14 = sdiv i32 %12, %v3
  %15 = sdiv i32 %13, %v3
  %16 = sdiv i32 %14, %v4
  %17 = sdiv i32 %15, %v4
  %18 = add nsw i32 %16, %vec.phi
  %19 = add nsw i32 %17, %vec.phi21
  %index.next = add i64 %index, 2
  %20 = icmp eq i64 %index.next, %n.vec
  br i1 %20, label %middle.block.loopexit, label %vector.body, !llvm.loop !238

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa25 = phi i32 [ %19, %vector.body ]
  %.lcssa = phi i32 [ %18, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i32 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i32 [ 0, %overflow.checked ], [ %.lcssa25, %middle.block.loopexit ]
  %bin.rdx = add i32 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %21 = add i64 %resume.val, 1
  %22 = trunc i64 %21 to i32
  %23 = sub i32 %4, %22
  %24 = sub i32 %count, %22
  %xtraiter = and i32 %23, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %arrayidx.prol = getelementptr inbounds i32, i32* %first, i64 %resume.val
  %25 = load i32, i32* %arrayidx.prol, align 4, !tbaa !5
  %div.i.prol = sdiv i32 %25, %v1
  %div1.i.prol = sdiv i32 %div.i.prol, %v2
  %div2.i.prol = sdiv i32 %div1.i.prol, %v3
  %div3.i.prol = sdiv i32 %div2.i.prol, %v4
  %add.prol = add nsw i32 %div3.i.prol, %bin.rdx
  %indvars.iv.next.prol = add nuw nsw i64 %resume.val, 1
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi i32 [ 0, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi i32 [ %bin.rdx, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %26 = icmp ult i32 %24, 1
  br i1 %26, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi i32 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %27 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %div.i = sdiv i32 %27, %v1
  %div1.i = sdiv i32 %div.i, %v2
  %div2.i = sdiv i32 %div1.i, %v3
  %div3.i = sdiv i32 %div2.i, %v4
  %add = add nsw i32 %div3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.next
  %28 = load i32, i32* %arrayidx.1, align 4, !tbaa !5
  %div.i.1 = sdiv i32 %28, %v1
  %div1.i.1 = sdiv i32 %div.i.1, %v2
  %div2.i.1 = sdiv i32 %div1.i.1, %v3
  %div3.i.1 = sdiv i32 %div2.i.1, %v4
  %add.1 = add nsw i32 %div3.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !239

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi i32 [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i32 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %29 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %29 to i32
  %div.i.i = sdiv i32 %conv.i, %v1
  %div1.i.i = sdiv i32 %div.i.i, %v2
  %div2.i.i = sdiv i32 %div1.i.i, %v3
  %div3.i.i = sdiv i32 %div2.i.i, %v4
  %mul.i = mul nsw i32 %div3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi31custom_divide_multiple_variableIiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %30 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %30) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi31custom_divide_multiple_variableIiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi31custom_divide_multiple_variableIiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %31 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %31
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi31custom_divide_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %32 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %32
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %33 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %33, null
  %34 = bitcast %struct.one_result* %33 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %35 = load i32, i32* @current_test, align 4, !tbaa !5
  %36 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %35, %36
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %37 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %36, %lor.lhs.false.i ]
  %add.i = add nsw i32 %37, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %34, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %38 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %39 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %39) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %40 = phi %struct.one_result* [ %38, %if.then.if.end5_crit_edge.i ], [ %33, %lor.lhs.false.i ]
  %41 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %35, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %41 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %41, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii32custom_divide_multiple_variable2IiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %div.i.i = sdiv i32 %v1, %v2
  %div1.i.i = sdiv i32 %div.i.i, %v3
  %div2.i.i = sdiv i32 %div1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert24 = insertelement <4 x i32> undef, i32 %div2.i.i, i32 0
  %broadcast.splat25 = shufflevector <4 x i32> %broadcast.splatinsert24, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi32custom_divide_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi32custom_divide_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi32custom_divide_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load23.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %wide.load.prol, %broadcast.splat25
  %17 = add <4 x i32> %wide.load23.prol, %broadcast.splat25
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa32.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi22.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi22 = phi <4 x i32> [ %vec.phi22.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load23 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = add <4 x i32> %wide.load, %vec.phi
  %23 = add <4 x i32> %wide.load23, %vec.phi22
  %24 = add <4 x i32> %22, %broadcast.splat25
  %25 = add <4 x i32> %23, %broadcast.splat25
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load23.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = add <4 x i32> %wide.load.1, %24
  %31 = add <4 x i32> %wide.load23.1, %25
  %32 = add <4 x i32> %30, %broadcast.splat25
  %33 = add <4 x i32> %31, %broadcast.splat25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !240

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa34 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa33 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa32 = phi <4 x i32> [ %.lcssa32.unr, %vector.ph.split ], [ %.lcssa34, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa32, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf30 = shufflevector <4 x i32> %bin.rdx29, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <4 x i32> %bin.rdx29, %rdx.shuf30
  %35 = extractelement <4 x i32> %bin.rdx31, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add.i = add i32 %36, %result.09.reg2mem.0
  %add = add i32 %add.i, %div2.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !241

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %add.i.i = add nsw i32 %div2.i.i, %conv.i
  %mul.i = mul nsw i32 %add.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi32custom_divide_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi32custom_divide_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi32custom_divide_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi32custom_divide_multiple_variable2IiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %45, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii30custom_mixed_multiple_variableIiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul nsw i32 %v3, %v2
  %div.i.i = sdiv i32 %mul.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat27 = shufflevector <4 x i32> %broadcast.splatinsert26, <4 x i32> undef, <4 x i32> zeroinitializer
  %broadcast.splatinsert28 = insertelement <4 x i32> undef, i32 %div.i.i, i32 0
  %broadcast.splat29 = shufflevector <4 x i32> %broadcast.splatinsert28, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi30custom_mixed_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %45, %_Z26check_shifted_variable_sumIi30custom_mixed_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi30custom_mixed_multiple_variableIiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load25.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %broadcast.splat27, %wide.load.prol
  %17 = add <4 x i32> %broadcast.splat27, %wide.load25.prol
  %18 = sub <4 x i32> %16, %broadcast.splat29
  %19 = sub <4 x i32> %17, %broadcast.splat29
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa36.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi24.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %38, %vector.body ]
  %vec.phi24 = phi <4 x i32> [ %vec.phi24.unr, %vector.ph.split.split ], [ %39, %vector.body ]
  %20 = getelementptr inbounds i32, i32* %first, i64 %index
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = getelementptr i32, i32* %20, i64 4
  %23 = bitcast i32* %22 to <4 x i32>*
  %wide.load25 = load <4 x i32>, <4 x i32>* %23, align 4, !tbaa !5
  %24 = add <4 x i32> %vec.phi, %broadcast.splat27
  %25 = add <4 x i32> %vec.phi24, %broadcast.splat27
  %26 = add <4 x i32> %24, %wide.load
  %27 = add <4 x i32> %25, %wide.load25
  %28 = sub <4 x i32> %26, %broadcast.splat29
  %29 = sub <4 x i32> %27, %broadcast.splat29
  %index.next = add i64 %index, 8
  %30 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %31 = bitcast i32* %30 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %31, align 4, !tbaa !5
  %32 = getelementptr i32, i32* %30, i64 4
  %33 = bitcast i32* %32 to <4 x i32>*
  %wide.load25.1 = load <4 x i32>, <4 x i32>* %33, align 4, !tbaa !5
  %34 = add <4 x i32> %28, %broadcast.splat27
  %35 = add <4 x i32> %29, %broadcast.splat27
  %36 = add <4 x i32> %34, %wide.load.1
  %37 = add <4 x i32> %35, %wide.load25.1
  %38 = sub <4 x i32> %36, %broadcast.splat29
  %39 = sub <4 x i32> %37, %broadcast.splat29
  %index.next.1 = add i64 %index.next, 8
  %40 = icmp eq i64 %index.next.1, %n.vec
  br i1 %40, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !242

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa38 = phi <4 x i32> [ %39, %vector.body ]
  %.lcssa37 = phi <4 x i32> [ %38, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa36 = phi <4 x i32> [ %.lcssa36.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa36, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx33 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <4 x i32> %bin.rdx33, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <4 x i32> %bin.rdx33, %rdx.shuf34
  %41 = extractelement <4 x i32> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %41, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %42 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add.i = add i32 %result.09.reg2mem.0, %v1
  %sub.i = add i32 %add.i, %42
  %add = sub i32 %sub.i, %div.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !243

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %41, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %43 to i32
  %add.i.i = add nsw i32 %conv.i, %v1
  %sub.i.i = sub i32 %add.i.i, %div.i.i
  %mul.i13 = mul nsw i32 %sub.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi30custom_mixed_multiple_variableIiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi30custom_mixed_multiple_variableIiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi30custom_mixed_multiple_variableIiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %45
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi30custom_mixed_multiple_variableIiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i15 = sub nsw i64 %call.i14, %46
  %conv.i16 = sitofp i64 %sub.i15 to double
  %div.i17 = fdiv double %conv.i16, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end6
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i18 = add nsw i32 %51, 10
  store i32 %add.i18, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i18 to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %48, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %52 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i17, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ii19custom_variable_andIiEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi19custom_variable_andIiEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi19custom_variable_andIiEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi19custom_variable_andIiEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = and <4 x i32> %wide.load.prol, %broadcast.splat23
  %17 = and <4 x i32> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = and <4 x i32> %wide.load, %broadcast.splat23
  %23 = and <4 x i32> %wide.load21, %broadcast.splat23
  %24 = add nsw <4 x i32> %22, %vec.phi
  %25 = add nsw <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = and <4 x i32> %wide.load.1, %broadcast.splat23
  %31 = and <4 x i32> %wide.load21.1, %broadcast.splat23
  %32 = add nsw <4 x i32> %30, %24
  %33 = add nsw <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !244

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %and.i = and i32 %36, %v1
  %add = add nsw i32 %and.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !245

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %and.i.i = and i32 %conv.i, %v1
  %mul.i = mul nsw i32 %and.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi19custom_variable_andIiEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi19custom_variable_andIiEEvT_S2_.exit

_Z26check_shifted_variable_sumIi19custom_variable_andIiEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi19custom_variable_andIiEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii28custom_multiple_variable_andIiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %and.i.i = and i32 %v2, %v1
  %and1.i.i = and i32 %and.i.i, %v3
  %and2.i.i = and i32 %and1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %and2.i.i, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi28custom_multiple_variable_andIiEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi28custom_multiple_variable_andIiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi28custom_multiple_variable_andIiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = and <4 x i32> %broadcast.splat23, %wide.load.prol
  %17 = and <4 x i32> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = and <4 x i32> %broadcast.splat23, %wide.load
  %23 = and <4 x i32> %broadcast.splat23, %wide.load21
  %24 = add nsw <4 x i32> %22, %vec.phi
  %25 = add nsw <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = and <4 x i32> %broadcast.splat23, %wide.load.1
  %31 = and <4 x i32> %broadcast.splat23, %wide.load21.1
  %32 = add nsw <4 x i32> %30, %24
  %33 = add nsw <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !246

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %and3.i = and i32 %and2.i.i, %36
  %add = add nsw i32 %and3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !247

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %and3.i.i = and i32 %and2.i.i, %conv.i
  %mul.i = mul nsw i32 %and3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi28custom_multiple_variable_andIiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi28custom_multiple_variable_andIiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi28custom_multiple_variable_andIiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi28custom_multiple_variable_andIiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ii18custom_variable_orIiEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi18custom_variable_orIiEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi18custom_variable_orIiEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi18custom_variable_orIiEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = or <4 x i32> %wide.load.prol, %broadcast.splat23
  %17 = or <4 x i32> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = or <4 x i32> %wide.load, %broadcast.splat23
  %23 = or <4 x i32> %wide.load21, %broadcast.splat23
  %24 = add nsw <4 x i32> %22, %vec.phi
  %25 = add nsw <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = or <4 x i32> %wide.load.1, %broadcast.splat23
  %31 = or <4 x i32> %wide.load21.1, %broadcast.splat23
  %32 = add nsw <4 x i32> %30, %24
  %33 = add nsw <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !248

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %or.i = or i32 %36, %v1
  %add = add nsw i32 %or.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !249

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %or.i.i = or i32 %conv.i, %v1
  %mul.i = mul nsw i32 %or.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi18custom_variable_orIiEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi18custom_variable_orIiEEvT_S2_.exit

_Z26check_shifted_variable_sumIi18custom_variable_orIiEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi18custom_variable_orIiEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii27custom_multiple_variable_orIiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %or.i.i = or i32 %v2, %v1
  %or1.i.i = or i32 %or.i.i, %v3
  %or2.i.i = or i32 %or1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %or2.i.i, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi27custom_multiple_variable_orIiEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi27custom_multiple_variable_orIiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi27custom_multiple_variable_orIiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = or <4 x i32> %broadcast.splat23, %wide.load.prol
  %17 = or <4 x i32> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = or <4 x i32> %broadcast.splat23, %wide.load
  %23 = or <4 x i32> %broadcast.splat23, %wide.load21
  %24 = add nsw <4 x i32> %22, %vec.phi
  %25 = add nsw <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = or <4 x i32> %broadcast.splat23, %wide.load.1
  %31 = or <4 x i32> %broadcast.splat23, %wide.load21.1
  %32 = add nsw <4 x i32> %30, %24
  %33 = add nsw <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !250

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %or3.i = or i32 %or2.i.i, %36
  %add = add nsw i32 %or3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !251

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %or3.i.i = or i32 %or2.i.i, %conv.i
  %mul.i = mul nsw i32 %or3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi27custom_multiple_variable_orIiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi27custom_multiple_variable_orIiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi27custom_multiple_variable_orIiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi27custom_multiple_variable_orIiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ii19custom_variable_xorIiEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi19custom_variable_xorIiEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi19custom_variable_xorIiEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi19custom_variable_xorIiEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = xor <4 x i32> %wide.load.prol, %broadcast.splat23
  %17 = xor <4 x i32> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = xor <4 x i32> %wide.load, %broadcast.splat23
  %23 = xor <4 x i32> %wide.load21, %broadcast.splat23
  %24 = add nsw <4 x i32> %22, %vec.phi
  %25 = add nsw <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = xor <4 x i32> %wide.load.1, %broadcast.splat23
  %31 = xor <4 x i32> %wide.load21.1, %broadcast.splat23
  %32 = add nsw <4 x i32> %30, %24
  %33 = add nsw <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !252

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %xor.i = xor i32 %36, %v1
  %add = add nsw i32 %xor.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !253

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %xor.i.i = xor i32 %conv.i, %v1
  %mul.i = mul nsw i32 %xor.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi19custom_variable_xorIiEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi19custom_variable_xorIiEEvT_S2_.exit

_Z26check_shifted_variable_sumIi19custom_variable_xorIiEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi19custom_variable_xorIiEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ii28custom_multiple_variable_xorIiEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %xor.i.i = xor i32 %v2, %v1
  %xor1.i.i = xor i32 %xor.i.i, %v3
  %xor2.i.i = xor i32 %xor1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %xor2.i.i, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIi28custom_multiple_variable_xorIiEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIi28custom_multiple_variable_xorIiEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIi28custom_multiple_variable_xorIiEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = xor <4 x i32> %broadcast.splat23, %wide.load.prol
  %17 = xor <4 x i32> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = xor <4 x i32> %broadcast.splat23, %wide.load
  %23 = xor <4 x i32> %broadcast.splat23, %wide.load21
  %24 = add nsw <4 x i32> %22, %vec.phi
  %25 = add nsw <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = xor <4 x i32> %broadcast.splat23, %wide.load.1
  %31 = xor <4 x i32> %broadcast.splat23, %wide.load21.1
  %32 = add nsw <4 x i32> %30, %24
  %33 = add nsw <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !254

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %xor3.i = xor i32 %xor2.i.i, %36
  %add = add nsw i32 %xor3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !255

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i32
  %xor3.i.i = xor i32 %xor2.i.i, %conv.i
  %mul.i = mul nsw i32 %xor3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIi28custom_multiple_variable_xorIiEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIi28custom_multiple_variable_xorIiEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIi28custom_multiple_variable_xorIiEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIi28custom_multiple_variable_xorIiEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ij19custom_add_variableIjEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %broadcast.splat24, %wide.load.prol
  %17 = add <4 x i32> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = add <4 x i32> %vec.phi, %broadcast.splat24
  %23 = add <4 x i32> %vec.phi21, %broadcast.splat24
  %24 = add <4 x i32> %22, %wide.load
  %25 = add <4 x i32> %23, %wide.load22
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = add <4 x i32> %24, %broadcast.splat24
  %31 = add <4 x i32> %25, %broadcast.splat24
  %32 = add <4 x i32> %30, %wide.load.1
  %33 = add <4 x i32> %31, %wide.load22.1
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !256

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add.i = add i32 %result.09.reg2mem.0, %v1
  %add = add i32 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !257

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %add.i.i = add i32 %conv.i, %v1
  %mul.i = mul i32 %add.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit

_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %45, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1Ij19custom_add_variableIjEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end7

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul = mul i32 %v1, %count
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = sext i32 %count to i64
  %4 = lshr i64 %3, 3
  %5 = mul i64 %4, 8
  %6 = add i64 %5, -8
  %7 = lshr i64 %6, 3
  %8 = add i64 %7, 1
  %backedge.overflow = icmp eq i32 %count, 0
  %n.vec = and i64 %2, -8
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %8, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %9 = icmp ult i64 %7, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit
  %10 = phi i32 [ %45, %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc6, %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %polly.stmt.for.inc.preheader, label %for.end

polly.stmt.for.inc.preheader:                     ; preds = %for.cond1.preheader
  br i1 %backedge.overflow, label %polly.stmt.for.inc.preheader28, label %overflow.checked

polly.stmt.for.inc.preheader28:                   ; preds = %middle.block, %polly.stmt.for.inc.preheader
  %result.09.reg2mem.0.ph = phi i32 [ 0, %polly.stmt.for.inc.preheader ], [ %42, %middle.block ]
  %polly.indvar.ph = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %resume.val, %middle.block ]
  br label %polly.stmt.for.inc

overflow.checked:                                 ; preds = %polly.stmt.for.inc.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.preheader.split

vector.body.prol.preheader:                       ; preds = %vector.body.preheader
  br label %vector.body.prol

vector.body.prol:                                 ; preds = %vector.body.prol.preheader, %vector.body.prol
  %index.prol = phi i64 [ %index.next.prol, %vector.body.prol ], [ 0, %vector.body.prol.preheader ]
  %vec.phi.prol = phi <4 x i32> [ %15, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %vec.phi19.prol = phi <4 x i32> [ %16, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %vector.body.prol ], [ %xtraiter, %vector.body.prol.preheader ]
  %11 = getelementptr i32, i32* %first, i64 %index.prol
  %12 = bitcast i32* %11 to <4 x i32>*
  %wide.load.prol = load <4 x i32>, <4 x i32>* %12, align 4, !alias.scope !258, !noalias !260
  %13 = getelementptr i32, i32* %11, i64 4
  %14 = bitcast i32* %13 to <4 x i32>*
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %14, align 4, !alias.scope !258, !noalias !260
  %15 = add <4 x i32> %wide.load.prol, %vec.phi.prol
  %16 = add <4 x i32> %wide.load21.prol, %vec.phi19.prol
  %index.next.prol = add i64 %index.prol, 8
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %vector.body.prol, label %vector.body.preheader.split.loopexit, !llvm.loop !265

vector.body.preheader.split.loopexit:             ; preds = %vector.body.prol
  %index.next.prol.lcssa = phi i64 [ %index.next.prol, %vector.body.prol ]
  %.lcssa33 = phi <4 x i32> [ %16, %vector.body.prol ]
  %.lcssa32 = phi <4 x i32> [ %15, %vector.body.prol ]
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.preheader.split.loopexit, %vector.body.preheader
  %.lcssa29.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa33, %vector.body.preheader.split.loopexit ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa32, %vector.body.preheader.split.loopexit ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ %index.next.prol.lcssa, %vector.body.preheader.split.loopexit ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa32, %vector.body.preheader.split.loopexit ]
  %vec.phi19.unr = phi <4 x i32> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa33, %vector.body.preheader.split.loopexit ]
  br i1 %9, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.3, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %39, %vector.body ]
  %vec.phi19 = phi <4 x i32> [ %vec.phi19.unr, %vector.body.preheader.split.split ], [ %40, %vector.body ]
  %17 = getelementptr i32, i32* %first, i64 %index
  %18 = bitcast i32* %17 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %18, align 4, !alias.scope !258, !noalias !260
  %19 = getelementptr i32, i32* %17, i64 4
  %20 = bitcast i32* %19 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %20, align 4, !alias.scope !258, !noalias !260
  %21 = add <4 x i32> %wide.load, %vec.phi
  %22 = add <4 x i32> %wide.load21, %vec.phi19
  %index.next = add i64 %index, 8
  %23 = getelementptr i32, i32* %first, i64 %index.next
  %24 = bitcast i32* %23 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %24, align 4, !alias.scope !258, !noalias !260
  %25 = getelementptr i32, i32* %23, i64 4
  %26 = bitcast i32* %25 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %26, align 4, !alias.scope !258, !noalias !260
  %27 = add <4 x i32> %wide.load.1, %21
  %28 = add <4 x i32> %wide.load21.1, %22
  %index.next.1 = add i64 %index.next, 8
  %29 = getelementptr i32, i32* %first, i64 %index.next.1
  %30 = bitcast i32* %29 to <4 x i32>*
  %wide.load.2 = load <4 x i32>, <4 x i32>* %30, align 4, !alias.scope !258, !noalias !260
  %31 = getelementptr i32, i32* %29, i64 4
  %32 = bitcast i32* %31 to <4 x i32>*
  %wide.load21.2 = load <4 x i32>, <4 x i32>* %32, align 4, !alias.scope !258, !noalias !260
  %33 = add <4 x i32> %wide.load.2, %27
  %34 = add <4 x i32> %wide.load21.2, %28
  %index.next.2 = add i64 %index.next.1, 8
  %35 = getelementptr i32, i32* %first, i64 %index.next.2
  %36 = bitcast i32* %35 to <4 x i32>*
  %wide.load.3 = load <4 x i32>, <4 x i32>* %36, align 4, !alias.scope !258, !noalias !260
  %37 = getelementptr i32, i32* %35, i64 4
  %38 = bitcast i32* %37 to <4 x i32>*
  %wide.load21.3 = load <4 x i32>, <4 x i32>* %38, align 4, !alias.scope !258, !noalias !260
  %39 = add <4 x i32> %wide.load.3, %33
  %40 = add <4 x i32> %wide.load21.3, %34
  %index.next.3 = add i64 %index.next.2, 8
  %41 = icmp eq i64 %index.next.3, %n.vec
  br i1 %41, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !266

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa31 = phi <4 x i32> [ %40, %vector.body ]
  %.lcssa30 = phi <4 x i32> [ %39, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa29 = phi <4 x i32> [ %.lcssa29.unr, %vector.body.preheader.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi24 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa29, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi24, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx25 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf26 = shufflevector <4 x i32> %bin.rdx25, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx25, %rdx.shuf26
  %42 = extractelement <4 x i32> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %2, %resume.val
  br i1 %cmp.n, label %for.end, label %polly.stmt.for.inc.preheader28

for.end.loopexit:                                 ; preds = %polly.stmt.for.inc
  %p_add.lcssa = phi i32 [ %p_add, %polly.stmt.for.inc ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %42, %middle.block ], [ %p_add.lcssa, %for.end.loopexit ]
  %add4 = add i32 %result.0.lcssa.reg2mem.0, %mul
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %43 to i32
  %add.i.i = add i32 %conv.i, %v1
  %mul.i = mul i32 %add.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %add4
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit

_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %10, %for.end ], [ %.pre, %if.then.i ]
  %inc6 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc6, %45
  br i1 %cmp, label %for.cond1.preheader, label %for.end7.loopexit

for.end7.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj19custom_add_variableIjEEvT_S2_.exit
  br label %for.end7

for.end7:                                         ; preds = %for.end7.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %46
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end7
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end7
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i = add nsw i32 %51, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %48, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %52 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void

polly.stmt.for.inc:                               ; preds = %polly.stmt.for.inc.preheader28, %polly.stmt.for.inc
  %result.09.reg2mem.0 = phi i32 [ %p_add, %polly.stmt.for.inc ], [ %result.09.reg2mem.0.ph, %polly.stmt.for.inc.preheader28 ]
  %polly.indvar = phi i64 [ %polly.indvar_next, %polly.stmt.for.inc ], [ %polly.indvar.ph, %polly.stmt.for.inc.preheader28 ]
  %scevgep = getelementptr i32, i32* %first, i64 %polly.indvar
  %_p_scalar_ = load i32, i32* %scevgep, align 4, !alias.scope !258, !noalias !260
  %p_add = add i32 %_p_scalar_, %result.09.reg2mem.0
  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
  %exitcond = icmp eq i64 %polly.indvar_next, %1
  br i1 %exitcond, label %for.end.loopexit, label %polly.stmt.for.inc, !llvm.loop !267
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij28custom_add_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %add.i.i = add i32 %v2, %v1
  %add1.i.i = add i32 %add.i.i, %v3
  %add2.i.i = add i32 %add1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %add2.i.i, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj28custom_add_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj28custom_add_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj28custom_add_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %broadcast.splat24, %wide.load.prol
  %17 = add <4 x i32> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = add <4 x i32> %broadcast.splat24, %vec.phi
  %23 = add <4 x i32> %broadcast.splat24, %vec.phi21
  %24 = add <4 x i32> %22, %wide.load
  %25 = add <4 x i32> %23, %wide.load22
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = add <4 x i32> %broadcast.splat24, %24
  %31 = add <4 x i32> %broadcast.splat24, %25
  %32 = add <4 x i32> %30, %wide.load.1
  %33 = add <4 x i32> %31, %wide.load22.1
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !268

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add3.i = add i32 %add2.i.i, %result.09.reg2mem.0
  %add = add i32 %add3.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !269

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %add3.i.i = add i32 %add2.i.i, %conv.i
  %mul.i = mul i32 %add3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj28custom_add_multiple_variableIjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj28custom_add_multiple_variableIjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj28custom_add_multiple_variableIjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj28custom_add_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %45, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ij19custom_sub_variableIjEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj19custom_sub_variableIjEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj19custom_sub_variableIjEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj19custom_sub_variableIjEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = sub <4 x i32> %wide.load.prol, %broadcast.splat24
  %17 = sub <4 x i32> %wide.load22.prol, %broadcast.splat24
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = sub <4 x i32> %wide.load, %broadcast.splat24
  %23 = sub <4 x i32> %wide.load22, %broadcast.splat24
  %24 = add <4 x i32> %22, %vec.phi
  %25 = add <4 x i32> %23, %vec.phi21
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = sub <4 x i32> %wide.load.1, %broadcast.splat24
  %31 = sub <4 x i32> %wide.load22.1, %broadcast.splat24
  %32 = add <4 x i32> %30, %24
  %33 = add <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !270

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %sub.i = sub i32 %36, %v1
  %add = add i32 %sub.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !271

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %sub.i.i = sub i32 %conv.i, %v1
  %mul.i = mul i32 %sub.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj19custom_sub_variableIjEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj19custom_sub_variableIjEEvT_S2_.exit

_Z26check_shifted_variable_sumIj19custom_sub_variableIjEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj19custom_sub_variableIjEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %40
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij28custom_sub_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %sum = add i32 %v2, %v1
  %sum20 = add i32 %sum, %v3
  %sum21 = add i32 %sum20, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <4 x i32> undef, i32 %sum21, i32 0
  %broadcast.splat29 = shufflevector <4 x i32> %broadcast.splatinsert28, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = sub <4 x i32> zeroinitializer, %broadcast.splat29
  %15 = sub <4 x i32> zeroinitializer, %broadcast.splat29
  %16 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj28custom_sub_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  %17 = phi i32 [ %41, %_Z26check_shifted_variable_sumIj28custom_sub_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj28custom_sub_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load27.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %18 = add <4 x i32> %14, %wide.load.prol
  %19 = add <4 x i32> %15, %wide.load27.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa36.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi26.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %16, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %34, %vector.body ]
  %vec.phi26 = phi <4 x i32> [ %vec.phi26.unr, %vector.ph.split.split ], [ %35, %vector.body ]
  %20 = getelementptr inbounds i32, i32* %first, i64 %index
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = getelementptr i32, i32* %20, i64 4
  %23 = bitcast i32* %22 to <4 x i32>*
  %wide.load27 = load <4 x i32>, <4 x i32>* %23, align 4, !tbaa !5
  %24 = sub <4 x i32> %vec.phi, %broadcast.splat29
  %25 = sub <4 x i32> %vec.phi26, %broadcast.splat29
  %26 = add <4 x i32> %24, %wide.load
  %27 = add <4 x i32> %25, %wide.load27
  %index.next = add i64 %index, 8
  %28 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = getelementptr i32, i32* %28, i64 4
  %31 = bitcast i32* %30 to <4 x i32>*
  %wide.load27.1 = load <4 x i32>, <4 x i32>* %31, align 4, !tbaa !5
  %32 = sub <4 x i32> %26, %broadcast.splat29
  %33 = sub <4 x i32> %27, %broadcast.splat29
  %34 = add <4 x i32> %32, %wide.load.1
  %35 = add <4 x i32> %33, %wide.load27.1
  %index.next.1 = add i64 %index.next, 8
  %36 = icmp eq i64 %index.next.1, %n.vec
  br i1 %36, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !272

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa38 = phi <4 x i32> [ %35, %vector.body ]
  %.lcssa37 = phi <4 x i32> [ %34, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa36 = phi <4 x i32> [ %.lcssa36.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa36, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx33 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <4 x i32> %bin.rdx33, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <4 x i32> %bin.rdx33, %rdx.shuf34
  %37 = extractelement <4 x i32> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %37, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %38 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %sub3.i = sub i32 %result.09.reg2mem.0, %sum21
  %add = add i32 %sub3.i, %38
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !273

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %37, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %39 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %39 to i32
  %sub3.i.i = sub i32 %conv.i, %sum21
  %mul.i = mul i32 %sub3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj28custom_sub_multiple_variableIjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj28custom_sub_multiple_variableIjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj28custom_sub_multiple_variableIjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %17, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj28custom_sub_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %42
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %44, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %48 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ij24custom_multiply_variableIjEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i32 %v1, 8000
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj24custom_multiply_variableIjEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj24custom_multiply_variableIjEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj24custom_multiply_variableIjEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = mul <4 x i32> %wide.load.prol, %broadcast.splat24
  %17 = mul <4 x i32> %wide.load22.prol, %broadcast.splat24
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = mul <4 x i32> %wide.load, %broadcast.splat24
  %23 = mul <4 x i32> %wide.load22, %broadcast.splat24
  %24 = add <4 x i32> %22, %vec.phi
  %25 = add <4 x i32> %23, %vec.phi21
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = mul <4 x i32> %wide.load.1, %broadcast.splat24
  %31 = mul <4 x i32> %wide.load22.1, %broadcast.splat24
  %32 = add <4 x i32> %30, %24
  %33 = add <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !274

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %mul.i = mul i32 %36, %v1
  %add = add i32 %mul.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !275

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %mul.i13 = mul i32 %mul.i.i, %conv.i
  %cmp.i.i = icmp eq i32 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj24custom_multiply_variableIjEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj24custom_multiply_variableIjEEvT_S2_.exit

_Z26check_shifted_variable_sumIj24custom_multiply_variableIjEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj24custom_multiply_variableIjEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %40
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij33custom_multiply_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i32 %v1, 8000
  %mul1.i.i = mul i32 %mul.i.i, %v2
  %mul2.i.i = mul i32 %mul1.i.i, %v3
  %mul3.i.i = mul i32 %mul2.i.i, %v4
  %mul.i = mul i32 %v2, %v1
  %mul1.i = mul i32 %mul.i, %v3
  %mul2.i = mul i32 %mul1.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <4 x i32> undef, i32 %mul2.i, i32 0
  %broadcast.splat24 = shufflevector <4 x i32> %broadcast.splatinsert23, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj33custom_multiply_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj33custom_multiply_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj33custom_multiply_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load22.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = mul <4 x i32> %broadcast.splat24, %wide.load.prol
  %17 = mul <4 x i32> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa31.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <4 x i32> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load22 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = mul <4 x i32> %broadcast.splat24, %wide.load
  %23 = mul <4 x i32> %broadcast.splat24, %wide.load22
  %24 = add <4 x i32> %22, %vec.phi
  %25 = add <4 x i32> %23, %vec.phi21
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load22.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = mul <4 x i32> %broadcast.splat24, %wide.load.1
  %31 = mul <4 x i32> %broadcast.splat24, %wide.load22.1
  %32 = add <4 x i32> %30, %24
  %33 = add <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !276

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa33 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa32 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa31 = phi <4 x i32> [ %.lcssa31.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa31, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx28 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf29 = shufflevector <4 x i32> %bin.rdx28, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx30 = add <4 x i32> %bin.rdx28, %rdx.shuf29
  %35 = extractelement <4 x i32> %bin.rdx30, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %mul3.i = mul i32 %mul2.i, %36
  %add = add i32 %mul3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !277

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %mul.i13 = mul i32 %mul3.i.i, %conv.i
  %cmp.i.i = icmp eq i32 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj33custom_multiply_multiple_variableIjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj33custom_multiply_multiple_variableIjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj33custom_multiply_multiple_variableIjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj33custom_multiply_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %40
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij34custom_multiply_multiple_variable2IjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i32 %v2, %v1
  %mul1.i.i = mul i32 %mul.i.i, %v3
  %mul2.i.i = mul i32 %mul1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert24 = insertelement <4 x i32> undef, i32 %mul2.i.i, i32 0
  %broadcast.splat25 = shufflevector <4 x i32> %broadcast.splatinsert24, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj34custom_multiply_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj34custom_multiply_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj34custom_multiply_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load23.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %broadcast.splat25, %wide.load.prol
  %17 = add <4 x i32> %broadcast.splat25, %wide.load23.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa32.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi22.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi22 = phi <4 x i32> [ %vec.phi22.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load23 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = add <4 x i32> %vec.phi, %broadcast.splat25
  %23 = add <4 x i32> %vec.phi22, %broadcast.splat25
  %24 = add <4 x i32> %22, %wide.load
  %25 = add <4 x i32> %23, %wide.load23
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load23.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = add <4 x i32> %24, %broadcast.splat25
  %31 = add <4 x i32> %25, %broadcast.splat25
  %32 = add <4 x i32> %30, %wide.load.1
  %33 = add <4 x i32> %31, %wide.load23.1
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !278

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa34 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa33 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa32 = phi <4 x i32> [ %.lcssa32.unr, %vector.ph.split ], [ %.lcssa34, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa32, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf30 = shufflevector <4 x i32> %bin.rdx29, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <4 x i32> %bin.rdx29, %rdx.shuf30
  %35 = extractelement <4 x i32> %bin.rdx31, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add.i = add i32 %result.09.reg2mem.0, %mul2.i.i
  %add = add i32 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !279

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %add.i.i = add i32 %conv.i, %mul2.i.i
  %mul.i13 = mul i32 %add.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj34custom_multiply_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj34custom_multiply_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj34custom_multiply_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj34custom_multiply_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %40
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %45, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ij22custom_divide_variableIjEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i32, i32* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj22custom_divide_variableIjEEvT_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIj22custom_divide_variableIjEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj22custom_divide_variableIjEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i32, i32* %first, align 4, !tbaa !5
  %16 = load i32, i32* %12, align 4, !tbaa !5
  %17 = udiv i32 %15, %v1
  %18 = udiv i32 %16, %v1
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa24.unr = phi i32 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i32 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i32 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi21.unr = phi i32 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i32 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi21 = phi i32 [ %vec.phi21.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2023 = or i64 %index, 1
  %19 = getelementptr inbounds i32, i32* %first, i64 %index
  %20 = getelementptr inbounds i32, i32* %first, i64 %induction2023
  %21 = load i32, i32* %19, align 4, !tbaa !5
  %22 = load i32, i32* %20, align 4, !tbaa !5
  %23 = udiv i32 %21, %v1
  %24 = udiv i32 %22, %v1
  %25 = add i32 %23, %vec.phi
  %26 = add i32 %24, %vec.phi21
  %index.next = add i64 %index, 2
  %induction2023.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %28 = getelementptr inbounds i32, i32* %first, i64 %induction2023.1
  %29 = load i32, i32* %27, align 4, !tbaa !5
  %30 = load i32, i32* %28, align 4, !tbaa !5
  %31 = udiv i32 %29, %v1
  %32 = udiv i32 %30, %v1
  %33 = add i32 %31, %25
  %34 = add i32 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !280

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa28 = phi i32 [ %34, %vector.body ]
  %.lcssa27 = phi i32 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa24 = phi i32 [ %.lcssa24.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i32 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa27, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i32 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i32 [ 0, %overflow.checked ], [ %.lcssa24, %middle.block.loopexit ]
  %bin.rdx = add i32 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter25 = and i32 %38, 3
  %lcmp.mod26 = icmp ne i32 %xtraiter25, 0
  br i1 %lcmp.mod26, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi i32 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter25, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.prol
  %40 = load i32, i32* %arrayidx.prol, align 4, !tbaa !5
  %div.i.prol = udiv i32 %40, %v1
  %add.prol = add i32 %div.i.prol, %result.09.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !281

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i32 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i32 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi i32 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi i32 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %42 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %div.i = udiv i32 %42, %v1
  %add = add i32 %div.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.next
  %43 = load i32, i32* %arrayidx.1, align 4, !tbaa !5
  %div.i.1 = udiv i32 %43, %v1
  %add.1 = add i32 %div.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.next.1
  %44 = load i32, i32* %arrayidx.2, align 4, !tbaa !5
  %div.i.2 = udiv i32 %44, %v1
  %add.2 = add i32 %div.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.next.2
  %45 = load i32, i32* %arrayidx.3, align 4, !tbaa !5
  %div.i.3 = udiv i32 %45, %v1
  %add.3 = add i32 %div.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !282

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i32 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i32 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %46 to i32
  %div.i.i = udiv i32 %conv.i, %v1
  %mul.i = mul i32 %div.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj22custom_divide_variableIjEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj22custom_divide_variableIjEEvT_S2_.exit

_Z26check_shifted_variable_sumIj22custom_divide_variableIjEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj22custom_divide_variableIjEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %49
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %51, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %55 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij31custom_divide_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj31custom_divide_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  %5 = phi i32 [ %31, %_Z26check_shifted_variable_sumIj31custom_divide_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj31custom_divide_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi = phi i32 [ %18, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi21 = phi i32 [ %19, %vector.body ], [ 0, %vector.body.preheader ]
  %induction2023 = or i64 %index, 1
  %6 = getelementptr inbounds i32, i32* %first, i64 %index
  %7 = getelementptr inbounds i32, i32* %first, i64 %induction2023
  %8 = load i32, i32* %6, align 4, !tbaa !5
  %9 = load i32, i32* %7, align 4, !tbaa !5
  %10 = udiv i32 %8, %v1
  %11 = udiv i32 %9, %v1
  %12 = udiv i32 %10, %v2
  %13 = udiv i32 %11, %v2
  %14 = udiv i32 %12, %v3
  %15 = udiv i32 %13, %v3
  %16 = udiv i32 %14, %v4
  %17 = udiv i32 %15, %v4
  %18 = add i32 %16, %vec.phi
  %19 = add i32 %17, %vec.phi21
  %index.next = add i64 %index, 2
  %20 = icmp eq i64 %index.next, %n.vec
  br i1 %20, label %middle.block.loopexit, label %vector.body, !llvm.loop !283

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa25 = phi i32 [ %19, %vector.body ]
  %.lcssa = phi i32 [ %18, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i32 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i32 [ 0, %overflow.checked ], [ %.lcssa25, %middle.block.loopexit ]
  %bin.rdx = add i32 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %21 = add i64 %resume.val, 1
  %22 = trunc i64 %21 to i32
  %23 = sub i32 %4, %22
  %24 = sub i32 %count, %22
  %xtraiter = and i32 %23, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %arrayidx.prol = getelementptr inbounds i32, i32* %first, i64 %resume.val
  %25 = load i32, i32* %arrayidx.prol, align 4, !tbaa !5
  %div.i.prol = udiv i32 %25, %v1
  %div1.i.prol = udiv i32 %div.i.prol, %v2
  %div2.i.prol = udiv i32 %div1.i.prol, %v3
  %div3.i.prol = udiv i32 %div2.i.prol, %v4
  %add.prol = add i32 %div3.i.prol, %bin.rdx
  %indvars.iv.next.prol = add nuw nsw i64 %resume.val, 1
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi i32 [ 0, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi i32 [ %bin.rdx, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %26 = icmp ult i32 %24, 1
  br i1 %26, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi i32 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %27 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %div.i = udiv i32 %27, %v1
  %div1.i = udiv i32 %div.i, %v2
  %div2.i = udiv i32 %div1.i, %v3
  %div3.i = udiv i32 %div2.i, %v4
  %add = add i32 %div3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i32, i32* %first, i64 %indvars.iv.next
  %28 = load i32, i32* %arrayidx.1, align 4, !tbaa !5
  %div.i.1 = udiv i32 %28, %v1
  %div1.i.1 = udiv i32 %div.i.1, %v2
  %div2.i.1 = udiv i32 %div1.i.1, %v3
  %div3.i.1 = udiv i32 %div2.i.1, %v4
  %add.1 = add i32 %div3.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !284

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi i32 [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i32 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %29 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %29 to i32
  %div.i.i = udiv i32 %conv.i, %v1
  %div1.i.i = udiv i32 %div.i.i, %v2
  %div2.i.i = udiv i32 %div1.i.i, %v3
  %div3.i.i = udiv i32 %div2.i.i, %v4
  %mul.i = mul i32 %div3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj31custom_divide_multiple_variableIjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %30 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %30) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj31custom_divide_multiple_variableIjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj31custom_divide_multiple_variableIjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %31 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %31
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj31custom_divide_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %32 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %32
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %33 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %33, null
  %34 = bitcast %struct.one_result* %33 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %35 = load i32, i32* @current_test, align 4, !tbaa !5
  %36 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %35, %36
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %37 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %36, %lor.lhs.false.i ]
  %add.i = add nsw i32 %37, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %34, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %38 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %39 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %39) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %40 = phi %struct.one_result* [ %38, %if.then.if.end5_crit_edge.i ], [ %33, %lor.lhs.false.i ]
  %41 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %35, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %41 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %41, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij32custom_divide_multiple_variable2IjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %div.i.i = udiv i32 %v1, %v2
  %div1.i.i = udiv i32 %div.i.i, %v3
  %div2.i.i = udiv i32 %div1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert24 = insertelement <4 x i32> undef, i32 %div2.i.i, i32 0
  %broadcast.splat25 = shufflevector <4 x i32> %broadcast.splatinsert24, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj32custom_divide_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj32custom_divide_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj32custom_divide_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load23.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %wide.load.prol, %broadcast.splat25
  %17 = add <4 x i32> %wide.load23.prol, %broadcast.splat25
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa32.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi22.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi22 = phi <4 x i32> [ %vec.phi22.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load23 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = add <4 x i32> %wide.load, %vec.phi
  %23 = add <4 x i32> %wide.load23, %vec.phi22
  %24 = add <4 x i32> %22, %broadcast.splat25
  %25 = add <4 x i32> %23, %broadcast.splat25
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load23.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = add <4 x i32> %wide.load.1, %24
  %31 = add <4 x i32> %wide.load23.1, %25
  %32 = add <4 x i32> %30, %broadcast.splat25
  %33 = add <4 x i32> %31, %broadcast.splat25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !285

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa34 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa33 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa32 = phi <4 x i32> [ %.lcssa32.unr, %vector.ph.split ], [ %.lcssa34, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa33, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa32, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf30 = shufflevector <4 x i32> %bin.rdx29, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx31 = add <4 x i32> %bin.rdx29, %rdx.shuf30
  %35 = extractelement <4 x i32> %bin.rdx31, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add.i = add i32 %36, %result.09.reg2mem.0
  %add = add i32 %add.i, %div2.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !286

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %add.i.i = add i32 %div2.i.i, %conv.i
  %mul.i = mul i32 %add.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj32custom_divide_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj32custom_divide_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj32custom_divide_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj32custom_divide_multiple_variable2IjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %45, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij30custom_mixed_multiple_variableIjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i32 %v3, %v2
  %div.i.i = udiv i32 %mul.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat27 = shufflevector <4 x i32> %broadcast.splatinsert26, <4 x i32> undef, <4 x i32> zeroinitializer
  %broadcast.splatinsert28 = insertelement <4 x i32> undef, i32 %div.i.i, i32 0
  %broadcast.splat29 = shufflevector <4 x i32> %broadcast.splatinsert28, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj30custom_mixed_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %45, %_Z26check_shifted_variable_sumIj30custom_mixed_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj30custom_mixed_multiple_variableIjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load25.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = add <4 x i32> %broadcast.splat27, %wide.load.prol
  %17 = add <4 x i32> %broadcast.splat27, %wide.load25.prol
  %18 = sub <4 x i32> %16, %broadcast.splat29
  %19 = sub <4 x i32> %17, %broadcast.splat29
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa36.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi24.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %38, %vector.body ]
  %vec.phi24 = phi <4 x i32> [ %vec.phi24.unr, %vector.ph.split.split ], [ %39, %vector.body ]
  %20 = getelementptr inbounds i32, i32* %first, i64 %index
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = getelementptr i32, i32* %20, i64 4
  %23 = bitcast i32* %22 to <4 x i32>*
  %wide.load25 = load <4 x i32>, <4 x i32>* %23, align 4, !tbaa !5
  %24 = add <4 x i32> %vec.phi, %broadcast.splat27
  %25 = add <4 x i32> %vec.phi24, %broadcast.splat27
  %26 = add <4 x i32> %24, %wide.load
  %27 = add <4 x i32> %25, %wide.load25
  %28 = sub <4 x i32> %26, %broadcast.splat29
  %29 = sub <4 x i32> %27, %broadcast.splat29
  %index.next = add i64 %index, 8
  %30 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %31 = bitcast i32* %30 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %31, align 4, !tbaa !5
  %32 = getelementptr i32, i32* %30, i64 4
  %33 = bitcast i32* %32 to <4 x i32>*
  %wide.load25.1 = load <4 x i32>, <4 x i32>* %33, align 4, !tbaa !5
  %34 = add <4 x i32> %28, %broadcast.splat27
  %35 = add <4 x i32> %29, %broadcast.splat27
  %36 = add <4 x i32> %34, %wide.load.1
  %37 = add <4 x i32> %35, %wide.load25.1
  %38 = sub <4 x i32> %36, %broadcast.splat29
  %39 = sub <4 x i32> %37, %broadcast.splat29
  %index.next.1 = add i64 %index.next, 8
  %40 = icmp eq i64 %index.next.1, %n.vec
  br i1 %40, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !287

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa38 = phi <4 x i32> [ %39, %vector.body ]
  %.lcssa37 = phi <4 x i32> [ %38, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa36 = phi <4 x i32> [ %.lcssa36.unr, %vector.ph.split ], [ %.lcssa38, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa37, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa36, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx33 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf34 = shufflevector <4 x i32> %bin.rdx33, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx35 = add <4 x i32> %bin.rdx33, %rdx.shuf34
  %41 = extractelement <4 x i32> %bin.rdx35, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %41, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %42 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %add.i = add i32 %result.09.reg2mem.0, %v1
  %sub.i = add i32 %add.i, %42
  %add = sub i32 %sub.i, %div.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !288

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %41, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %43 to i32
  %add.i.i = add i32 %conv.i, %v1
  %sub.i.i = sub i32 %add.i.i, %div.i.i
  %mul.i13 = mul i32 %sub.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj30custom_mixed_multiple_variableIjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj30custom_mixed_multiple_variableIjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj30custom_mixed_multiple_variableIjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %45
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj30custom_mixed_multiple_variableIjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i15 = sub nsw i64 %call.i14, %46
  %conv.i16 = sitofp i64 %sub.i15 to double
  %div.i17 = fdiv double %conv.i16, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end6
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i18 = add nsw i32 %51, 10
  store i32 %add.i18, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i18 to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %48, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %52 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i17, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ij19custom_variable_andIjEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj19custom_variable_andIjEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj19custom_variable_andIjEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj19custom_variable_andIjEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = and <4 x i32> %wide.load.prol, %broadcast.splat23
  %17 = and <4 x i32> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = and <4 x i32> %wide.load, %broadcast.splat23
  %23 = and <4 x i32> %wide.load21, %broadcast.splat23
  %24 = add <4 x i32> %22, %vec.phi
  %25 = add <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = and <4 x i32> %wide.load.1, %broadcast.splat23
  %31 = and <4 x i32> %wide.load21.1, %broadcast.splat23
  %32 = add <4 x i32> %30, %24
  %33 = add <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !289

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %and.i = and i32 %36, %v1
  %add = add i32 %and.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !290

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %and.i.i = and i32 %conv.i, %v1
  %mul.i = mul i32 %and.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj19custom_variable_andIjEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj19custom_variable_andIjEEvT_S2_.exit

_Z26check_shifted_variable_sumIj19custom_variable_andIjEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj19custom_variable_andIjEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij28custom_multiple_variable_andIjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %and.i.i = and i32 %v2, %v1
  %and1.i.i = and i32 %and.i.i, %v3
  %and2.i.i = and i32 %and1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %and2.i.i, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj28custom_multiple_variable_andIjEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj28custom_multiple_variable_andIjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj28custom_multiple_variable_andIjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = and <4 x i32> %broadcast.splat23, %wide.load.prol
  %17 = and <4 x i32> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = and <4 x i32> %broadcast.splat23, %wide.load
  %23 = and <4 x i32> %broadcast.splat23, %wide.load21
  %24 = add <4 x i32> %22, %vec.phi
  %25 = add <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = and <4 x i32> %broadcast.splat23, %wide.load.1
  %31 = and <4 x i32> %broadcast.splat23, %wide.load21.1
  %32 = add <4 x i32> %30, %24
  %33 = add <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !291

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %and3.i = and i32 %and2.i.i, %36
  %add = add i32 %and3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !292

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %and3.i.i = and i32 %and2.i.i, %conv.i
  %mul.i = mul i32 %and3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj28custom_multiple_variable_andIjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj28custom_multiple_variable_andIjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj28custom_multiple_variable_andIjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj28custom_multiple_variable_andIjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ij18custom_variable_orIjEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj18custom_variable_orIjEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj18custom_variable_orIjEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj18custom_variable_orIjEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = or <4 x i32> %wide.load.prol, %broadcast.splat23
  %17 = or <4 x i32> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = or <4 x i32> %wide.load, %broadcast.splat23
  %23 = or <4 x i32> %wide.load21, %broadcast.splat23
  %24 = add <4 x i32> %22, %vec.phi
  %25 = add <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = or <4 x i32> %wide.load.1, %broadcast.splat23
  %31 = or <4 x i32> %wide.load21.1, %broadcast.splat23
  %32 = add <4 x i32> %30, %24
  %33 = add <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !293

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %or.i = or i32 %36, %v1
  %add = add i32 %or.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !294

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %or.i.i = or i32 %conv.i, %v1
  %mul.i = mul i32 %or.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj18custom_variable_orIjEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj18custom_variable_orIjEEvT_S2_.exit

_Z26check_shifted_variable_sumIj18custom_variable_orIjEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj18custom_variable_orIjEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij27custom_multiple_variable_orIjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %or.i.i = or i32 %v2, %v1
  %or1.i.i = or i32 %or.i.i, %v3
  %or2.i.i = or i32 %or1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %or2.i.i, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj27custom_multiple_variable_orIjEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj27custom_multiple_variable_orIjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj27custom_multiple_variable_orIjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = or <4 x i32> %broadcast.splat23, %wide.load.prol
  %17 = or <4 x i32> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = or <4 x i32> %broadcast.splat23, %wide.load
  %23 = or <4 x i32> %broadcast.splat23, %wide.load21
  %24 = add <4 x i32> %22, %vec.phi
  %25 = add <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = or <4 x i32> %broadcast.splat23, %wide.load.1
  %31 = or <4 x i32> %broadcast.splat23, %wide.load21.1
  %32 = add <4 x i32> %30, %24
  %33 = add <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !295

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %or3.i = or i32 %or2.i.i, %36
  %add = add i32 %or3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !296

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %or3.i.i = or i32 %or2.i.i, %conv.i
  %mul.i = mul i32 %or3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj27custom_multiple_variable_orIjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj27custom_multiple_variable_orIjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj27custom_multiple_variable_orIjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj27custom_multiple_variable_orIjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Ij19custom_variable_xorIjEEvPT_iS2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %v1, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj19custom_variable_xorIjEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj19custom_variable_xorIjEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj19custom_variable_xorIjEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = xor <4 x i32> %wide.load.prol, %broadcast.splat23
  %17 = xor <4 x i32> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = xor <4 x i32> %wide.load, %broadcast.splat23
  %23 = xor <4 x i32> %wide.load21, %broadcast.splat23
  %24 = add <4 x i32> %22, %vec.phi
  %25 = add <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = xor <4 x i32> %wide.load.1, %broadcast.splat23
  %31 = xor <4 x i32> %wide.load21.1, %broadcast.splat23
  %32 = add <4 x i32> %30, %24
  %33 = add <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !297

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %xor.i = xor i32 %36, %v1
  %add = add i32 %xor.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !298

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %xor.i.i = xor i32 %conv.i, %v1
  %mul.i = mul i32 %xor.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj19custom_variable_xorIjEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj19custom_variable_xorIjEEvT_S2_.exit

_Z26check_shifted_variable_sumIj19custom_variable_xorIjEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj19custom_variable_xorIjEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Ij28custom_multiple_variable_xorIjEEvPT_iS2_S2_S2_S2_PKc(i32* nocapture readonly %first, i32 %count, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %xor.i.i = xor i32 %v2, %v1
  %xor1.i.i = xor i32 %xor.i.i, %v3
  %xor2.i.i = xor i32 %xor1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 3
  %7 = mul i64 %6, 8
  %8 = add i64 %7, -8
  %9 = lshr i64 %8, 3
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <4 x i32> undef, i32 %xor2.i.i, i32 0
  %broadcast.splat23 = shufflevector <4 x i32> %broadcast.splatinsert22, <4 x i32> undef, <4 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i32* %first to <4 x i32>*
  %12 = getelementptr i32, i32* %first, i64 4
  %13 = bitcast i32* %12 to <4 x i32>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIj28custom_multiple_variable_xorIjEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIj28custom_multiple_variable_xorIjEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIj28custom_multiple_variable_xorIjEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <4 x i32>, <4 x i32>* %11, align 4, !tbaa !5
  %wide.load21.prol = load <4 x i32>, <4 x i32>* %13, align 4, !tbaa !5
  %16 = xor <4 x i32> %broadcast.splat23, %wide.load.prol
  %17 = xor <4 x i32> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 8, %vector.body.prol ]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <4 x i32> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <4 x i32> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i32, i32* %first, i64 %index
  %19 = bitcast i32* %18 to <4 x i32>*
  %wide.load = load <4 x i32>, <4 x i32>* %19, align 4, !tbaa !5
  %20 = getelementptr i32, i32* %18, i64 4
  %21 = bitcast i32* %20 to <4 x i32>*
  %wide.load21 = load <4 x i32>, <4 x i32>* %21, align 4, !tbaa !5
  %22 = xor <4 x i32> %broadcast.splat23, %wide.load
  %23 = xor <4 x i32> %broadcast.splat23, %wide.load21
  %24 = add <4 x i32> %22, %vec.phi
  %25 = add <4 x i32> %23, %vec.phi20
  %index.next = add i64 %index, 8
  %26 = getelementptr inbounds i32, i32* %first, i64 %index.next
  %27 = bitcast i32* %26 to <4 x i32>*
  %wide.load.1 = load <4 x i32>, <4 x i32>* %27, align 4, !tbaa !5
  %28 = getelementptr i32, i32* %26, i64 4
  %29 = bitcast i32* %28 to <4 x i32>*
  %wide.load21.1 = load <4 x i32>, <4 x i32>* %29, align 4, !tbaa !5
  %30 = xor <4 x i32> %broadcast.splat23, %wide.load.1
  %31 = xor <4 x i32> %broadcast.splat23, %wide.load21.1
  %32 = add <4 x i32> %30, %24
  %33 = add <4 x i32> %31, %25
  %index.next.1 = add i64 %index.next, 8
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !299

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <4 x i32> [ %33, %vector.body ]
  %.lcssa31 = phi <4 x i32> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <4 x i32> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <4 x i32> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <4 x i32> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx27 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf28 = shufflevector <4 x i32> %bin.rdx27, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx29 = add <4 x i32> %bin.rdx27, %rdx.shuf28
  %35 = extractelement <4 x i32> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i32 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i32, i32* %first, i64 %indvars.iv
  %36 = load i32, i32* %arrayidx, align 4, !tbaa !5
  %xor3.i = xor i32 %xor2.i.i, %36
  %add = add i32 %xor3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !300

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i32 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i32 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i32
  %xor3.i.i = xor i32 %xor2.i.i, %conv.i
  %mul.i = mul i32 %xor3.i.i, 8000
  %cmp.i.i = icmp eq i32 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIj28custom_multiple_variable_xorIjEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIj28custom_multiple_variable_xorIjEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIj28custom_multiple_variable_xorIjEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIj28custom_multiple_variable_xorIjEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Il19custom_add_variableIlEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat24 = shufflevector <2 x i64> %broadcast.splatinsert23, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load22.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %broadcast.splat24, %wide.load.prol
  %17 = add <2 x i64> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa29.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <2 x i64> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load22 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = add <2 x i64> %vec.phi, %broadcast.splat24
  %23 = add <2 x i64> %vec.phi21, %broadcast.splat24
  %24 = add <2 x i64> %22, %wide.load
  %25 = add <2 x i64> %23, %wide.load22
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load22.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = add <2 x i64> %24, %broadcast.splat24
  %31 = add <2 x i64> %25, %broadcast.splat24
  %32 = add <2 x i64> %30, %wide.load.1
  %33 = add <2 x i64> %31, %wide.load22.1
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !301

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa31 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa30 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa29 = phi <2 x i64> [ %.lcssa29.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa29, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx28 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx28, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add.i = add i64 %result.09.reg2mem.0, %v1
  %add = add i64 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !302

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %add.i.i = add nsw i64 %conv.i, %v1
  %mul.i = mul nsw i64 %add.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit

_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %45, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1Il19custom_add_variableIlEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end7

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %conv = sext i32 %count to i64
  %mul = mul nsw i64 %conv, %v1
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = lshr i64 %2, 2
  %4 = mul i64 %3, 4
  %5 = add i64 %4, -4
  %6 = lshr i64 %5, 2
  %7 = add i64 %6, 1
  %backedge.overflow = icmp eq i32 %count, 0
  %n.vec = and i64 %1, -4
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %7, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %8 = icmp ult i64 %6, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit
  %9 = phi i32 [ %44, %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc6, %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %polly.stmt.for.inc.preheader, label %for.end

polly.stmt.for.inc.preheader:                     ; preds = %for.cond1.preheader
  br i1 %backedge.overflow, label %polly.stmt.for.inc.preheader26, label %overflow.checked

polly.stmt.for.inc.preheader26:                   ; preds = %middle.block, %polly.stmt.for.inc.preheader
  %result.09.reg2mem.0.ph = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %41, %middle.block ]
  %polly.indvar.ph = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %resume.val, %middle.block ]
  br label %polly.stmt.for.inc

overflow.checked:                                 ; preds = %polly.stmt.for.inc.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.preheader.split

vector.body.prol.preheader:                       ; preds = %vector.body.preheader
  br label %vector.body.prol

vector.body.prol:                                 ; preds = %vector.body.prol.preheader, %vector.body.prol
  %index.prol = phi i64 [ %index.next.prol, %vector.body.prol ], [ 0, %vector.body.prol.preheader ]
  %vec.phi.prol = phi <2 x i64> [ %14, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %vec.phi19.prol = phi <2 x i64> [ %15, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %vector.body.prol ], [ %xtraiter, %vector.body.prol.preheader ]
  %10 = getelementptr i64, i64* %first, i64 %index.prol
  %11 = bitcast i64* %10 to <2 x i64>*
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !alias.scope !303, !noalias !305
  %12 = getelementptr i64, i64* %10, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !alias.scope !303, !noalias !305
  %14 = add nsw <2 x i64> %wide.load.prol, %vec.phi.prol
  %15 = add nsw <2 x i64> %wide.load21.prol, %vec.phi19.prol
  %index.next.prol = add i64 %index.prol, 4
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %vector.body.prol, label %vector.body.preheader.split.loopexit, !llvm.loop !310

vector.body.preheader.split.loopexit:             ; preds = %vector.body.prol
  %index.next.prol.lcssa = phi i64 [ %index.next.prol, %vector.body.prol ]
  %.lcssa31 = phi <2 x i64> [ %15, %vector.body.prol ]
  %.lcssa30 = phi <2 x i64> [ %14, %vector.body.prol ]
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.preheader.split.loopexit, %vector.body.preheader
  %.lcssa27.unr = phi <2 x i64> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa31, %vector.body.preheader.split.loopexit ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa30, %vector.body.preheader.split.loopexit ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ %index.next.prol.lcssa, %vector.body.preheader.split.loopexit ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa30, %vector.body.preheader.split.loopexit ]
  %vec.phi19.unr = phi <2 x i64> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa31, %vector.body.preheader.split.loopexit ]
  br i1 %8, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.3, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %38, %vector.body ]
  %vec.phi19 = phi <2 x i64> [ %vec.phi19.unr, %vector.body.preheader.split.split ], [ %39, %vector.body ]
  %16 = getelementptr i64, i64* %first, i64 %index
  %17 = bitcast i64* %16 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %17, align 8, !alias.scope !303, !noalias !305
  %18 = getelementptr i64, i64* %16, i64 2
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %19, align 8, !alias.scope !303, !noalias !305
  %20 = add nsw <2 x i64> %wide.load, %vec.phi
  %21 = add nsw <2 x i64> %wide.load21, %vec.phi19
  %index.next = add i64 %index, 4
  %22 = getelementptr i64, i64* %first, i64 %index.next
  %23 = bitcast i64* %22 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %23, align 8, !alias.scope !303, !noalias !305
  %24 = getelementptr i64, i64* %22, i64 2
  %25 = bitcast i64* %24 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %25, align 8, !alias.scope !303, !noalias !305
  %26 = add nsw <2 x i64> %wide.load.1, %20
  %27 = add nsw <2 x i64> %wide.load21.1, %21
  %index.next.1 = add i64 %index.next, 4
  %28 = getelementptr i64, i64* %first, i64 %index.next.1
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load.2 = load <2 x i64>, <2 x i64>* %29, align 8, !alias.scope !303, !noalias !305
  %30 = getelementptr i64, i64* %28, i64 2
  %31 = bitcast i64* %30 to <2 x i64>*
  %wide.load21.2 = load <2 x i64>, <2 x i64>* %31, align 8, !alias.scope !303, !noalias !305
  %32 = add nsw <2 x i64> %wide.load.2, %26
  %33 = add nsw <2 x i64> %wide.load21.2, %27
  %index.next.2 = add i64 %index.next.1, 4
  %34 = getelementptr i64, i64* %first, i64 %index.next.2
  %35 = bitcast i64* %34 to <2 x i64>*
  %wide.load.3 = load <2 x i64>, <2 x i64>* %35, align 8, !alias.scope !303, !noalias !305
  %36 = getelementptr i64, i64* %34, i64 2
  %37 = bitcast i64* %36 to <2 x i64>*
  %wide.load21.3 = load <2 x i64>, <2 x i64>* %37, align 8, !alias.scope !303, !noalias !305
  %38 = add nsw <2 x i64> %wide.load.3, %32
  %39 = add nsw <2 x i64> %wide.load21.3, %33
  %index.next.3 = add i64 %index.next.2, 4
  %40 = icmp eq i64 %index.next.3, %n.vec
  br i1 %40, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !311

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa29 = phi <2 x i64> [ %39, %vector.body ]
  %.lcssa28 = phi <2 x i64> [ %38, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa27 = phi <2 x i64> [ %.lcssa27.unr, %vector.body.preheader.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi24 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa27, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi24, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx25 = add <2 x i64> %bin.rdx, %rdx.shuf
  %41 = extractelement <2 x i64> %bin.rdx25, i32 0
  %cmp.n = icmp eq i64 %1, %resume.val
  br i1 %cmp.n, label %for.end, label %polly.stmt.for.inc.preheader26

for.end.loopexit:                                 ; preds = %polly.stmt.for.inc
  %p_add.lcssa = phi i64 [ %p_add, %polly.stmt.for.inc ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %41, %middle.block ], [ %p_add.lcssa, %for.end.loopexit ]
  %add4 = add nsw i64 %result.0.lcssa.reg2mem.0, %mul
  %42 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %42 to i64
  %add.i.i = add nsw i64 %conv.i, %v1
  %mul.i = mul nsw i64 %add.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %add4
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %43) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit

_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %44 = phi i32 [ %9, %for.end ], [ %.pre, %if.then.i ]
  %inc6 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc6, %44
  br i1 %cmp, label %for.cond1.preheader, label %for.end7.loopexit

for.end7.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl19custom_add_variableIlEEvT_S2_.exit
  br label %for.end7

for.end7:                                         ; preds = %for.end7.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %45 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %45
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %46 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %46, null
  %47 = bitcast %struct.one_result* %46 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end7
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end7
  %48 = load i32, i32* @current_test, align 4, !tbaa !5
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %48, %49
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %50 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %add.i = add nsw i32 %50, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %47, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %51 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %52 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %52) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %53 = phi %struct.one_result* [ %51, %if.then.if.end5_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %54 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %48, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %54 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %53, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %53, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %54, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void

polly.stmt.for.inc:                               ; preds = %polly.stmt.for.inc.preheader26, %polly.stmt.for.inc
  %result.09.reg2mem.0 = phi i64 [ %p_add, %polly.stmt.for.inc ], [ %result.09.reg2mem.0.ph, %polly.stmt.for.inc.preheader26 ]
  %polly.indvar = phi i64 [ %polly.indvar_next, %polly.stmt.for.inc ], [ %polly.indvar.ph, %polly.stmt.for.inc.preheader26 ]
  %scevgep = getelementptr i64, i64* %first, i64 %polly.indvar
  %_p_scalar_ = load i64, i64* %scevgep, align 8, !alias.scope !303, !noalias !305
  %p_add = add nsw i64 %_p_scalar_, %result.09.reg2mem.0
  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
  %exitcond = icmp eq i64 %polly.indvar_next, %conv
  br i1 %exitcond, label %for.end.loopexit, label %polly.stmt.for.inc, !llvm.loop !312
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il28custom_add_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %add.i.i = add i64 %v2, %v1
  %add1.i.i = add i64 %add.i.i, %v3
  %add2.i.i = add i64 %add1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <2 x i64> undef, i64 %add2.i.i, i32 0
  %broadcast.splat24 = shufflevector <2 x i64> %broadcast.splatinsert23, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl28custom_add_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl28custom_add_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl28custom_add_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load22.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %broadcast.splat24, %wide.load.prol
  %17 = add <2 x i64> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa29.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <2 x i64> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load22 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = add <2 x i64> %broadcast.splat24, %vec.phi
  %23 = add <2 x i64> %broadcast.splat24, %vec.phi21
  %24 = add <2 x i64> %22, %wide.load
  %25 = add <2 x i64> %23, %wide.load22
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load22.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = add <2 x i64> %broadcast.splat24, %24
  %31 = add <2 x i64> %broadcast.splat24, %25
  %32 = add <2 x i64> %30, %wide.load.1
  %33 = add <2 x i64> %31, %wide.load22.1
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !313

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa31 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa30 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa29 = phi <2 x i64> [ %.lcssa29.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa29, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx28 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx28, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add3.i = add i64 %add2.i.i, %result.09.reg2mem.0
  %add = add i64 %add3.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !314

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %add3.i.i = add i64 %add2.i.i, %conv.i
  %mul.i = mul nsw i64 %add3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl28custom_add_multiple_variableIlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl28custom_add_multiple_variableIlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl28custom_add_multiple_variableIlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl28custom_add_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %45, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Il19custom_sub_variableIlEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat24 = shufflevector <2 x i64> %broadcast.splatinsert23, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl19custom_sub_variableIlEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl19custom_sub_variableIlEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl19custom_sub_variableIlEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load22.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = sub nsw <2 x i64> %wide.load.prol, %broadcast.splat24
  %17 = sub nsw <2 x i64> %wide.load22.prol, %broadcast.splat24
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa29.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <2 x i64> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load22 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = sub nsw <2 x i64> %wide.load, %broadcast.splat24
  %23 = sub nsw <2 x i64> %wide.load22, %broadcast.splat24
  %24 = add nsw <2 x i64> %22, %vec.phi
  %25 = add nsw <2 x i64> %23, %vec.phi21
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load22.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = sub nsw <2 x i64> %wide.load.1, %broadcast.splat24
  %31 = sub nsw <2 x i64> %wide.load22.1, %broadcast.splat24
  %32 = add nsw <2 x i64> %30, %24
  %33 = add nsw <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !315

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa31 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa30 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa29 = phi <2 x i64> [ %.lcssa29.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa29, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx28 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx28, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %sub.i = sub nsw i64 %36, %v1
  %add = add nsw i64 %sub.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !316

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %sub.i.i = sub nsw i64 %conv.i, %v1
  %mul.i = mul nsw i64 %sub.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl19custom_sub_variableIlEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl19custom_sub_variableIlEEvT_S2_.exit

_Z26check_shifted_variable_sumIl19custom_sub_variableIlEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl19custom_sub_variableIlEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %40
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il28custom_sub_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %sum = add i64 %v2, %v1
  %sum20 = add i64 %sum, %v3
  %sum21 = add i64 %sum20, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <2 x i64> undef, i64 %sum21, i32 0
  %broadcast.splat29 = shufflevector <2 x i64> %broadcast.splatinsert28, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = sub <2 x i64> zeroinitializer, %broadcast.splat29
  %15 = sub <2 x i64> zeroinitializer, %broadcast.splat29
  %16 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl28custom_sub_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  %17 = phi i32 [ %41, %_Z26check_shifted_variable_sumIl28custom_sub_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl28custom_sub_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load27.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %18 = add <2 x i64> %14, %wide.load.prol
  %19 = add <2 x i64> %15, %wide.load27.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa34.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi26.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %16, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %34, %vector.body ]
  %vec.phi26 = phi <2 x i64> [ %vec.phi26.unr, %vector.ph.split.split ], [ %35, %vector.body ]
  %20 = getelementptr inbounds i64, i64* %first, i64 %index
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = getelementptr i64, i64* %20, i64 2
  %23 = bitcast i64* %22 to <2 x i64>*
  %wide.load27 = load <2 x i64>, <2 x i64>* %23, align 8, !tbaa !11
  %24 = sub <2 x i64> %vec.phi, %broadcast.splat29
  %25 = sub <2 x i64> %vec.phi26, %broadcast.splat29
  %26 = add <2 x i64> %24, %wide.load
  %27 = add <2 x i64> %25, %wide.load27
  %index.next = add i64 %index, 4
  %28 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = getelementptr i64, i64* %28, i64 2
  %31 = bitcast i64* %30 to <2 x i64>*
  %wide.load27.1 = load <2 x i64>, <2 x i64>* %31, align 8, !tbaa !11
  %32 = sub <2 x i64> %26, %broadcast.splat29
  %33 = sub <2 x i64> %27, %broadcast.splat29
  %34 = add <2 x i64> %32, %wide.load.1
  %35 = add <2 x i64> %33, %wide.load27.1
  %index.next.1 = add i64 %index.next, 4
  %36 = icmp eq i64 %index.next.1, %n.vec
  br i1 %36, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !317

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa36 = phi <2 x i64> [ %35, %vector.body ]
  %.lcssa35 = phi <2 x i64> [ %34, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa34 = phi <2 x i64> [ %.lcssa34.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa35, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa34, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx33 = add <2 x i64> %bin.rdx, %rdx.shuf
  %37 = extractelement <2 x i64> %bin.rdx33, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %37, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %38 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %sub3.i = sub i64 %result.09.reg2mem.0, %sum21
  %add = add i64 %sub3.i, %38
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !318

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %37, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %39 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %39 to i64
  %sub3.i.i = sub i64 %conv.i, %sum21
  %mul.i = mul nsw i64 %sub3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl28custom_sub_multiple_variableIlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl28custom_sub_multiple_variableIlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl28custom_sub_multiple_variableIlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %17, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl28custom_sub_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %42
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %44, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %48 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Il24custom_multiply_variableIlEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i64 %v1, 8000
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i64, i64* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl24custom_multiply_variableIlEEvT_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIl24custom_multiply_variableIlEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl24custom_multiply_variableIlEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i64, i64* %first, align 8, !tbaa !11
  %16 = load i64, i64* %12, align 8, !tbaa !11
  %17 = mul nsw i64 %15, %v1
  %18 = mul nsw i64 %16, %v1
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa24.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi21.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i64 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi21 = phi i64 [ %vec.phi21.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2023 = or i64 %index, 1
  %19 = getelementptr inbounds i64, i64* %first, i64 %index
  %20 = getelementptr inbounds i64, i64* %first, i64 %induction2023
  %21 = load i64, i64* %19, align 8, !tbaa !11
  %22 = load i64, i64* %20, align 8, !tbaa !11
  %23 = mul nsw i64 %21, %v1
  %24 = mul nsw i64 %22, %v1
  %25 = add nsw i64 %23, %vec.phi
  %26 = add nsw i64 %24, %vec.phi21
  %index.next = add i64 %index, 2
  %induction2023.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %28 = getelementptr inbounds i64, i64* %first, i64 %induction2023.1
  %29 = load i64, i64* %27, align 8, !tbaa !11
  %30 = load i64, i64* %28, align 8, !tbaa !11
  %31 = mul nsw i64 %29, %v1
  %32 = mul nsw i64 %30, %v1
  %33 = add nsw i64 %31, %25
  %34 = add nsw i64 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !319

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa28 = phi i64 [ %34, %vector.body ]
  %.lcssa27 = phi i64 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa24 = phi i64 [ %.lcssa24.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i64 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa27, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i64 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i64 [ 0, %overflow.checked ], [ %.lcssa24, %middle.block.loopexit ]
  %bin.rdx = add i64 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter25 = and i32 %38, 3
  %lcmp.mod26 = icmp ne i32 %xtraiter25, 0
  br i1 %lcmp.mod26, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi i64 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter25, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.prol
  %40 = load i64, i64* %arrayidx.prol, align 8, !tbaa !11
  %mul.i.prol = mul nsw i64 %40, %v1
  %add.prol = add nsw i64 %mul.i.prol, %result.09.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !320

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i64 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i64 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi i64 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi i64 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %42 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %mul.i = mul nsw i64 %42, %v1
  %add = add nsw i64 %mul.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next
  %43 = load i64, i64* %arrayidx.1, align 8, !tbaa !11
  %mul.i.1 = mul nsw i64 %43, %v1
  %add.1 = add nsw i64 %mul.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.1
  %44 = load i64, i64* %arrayidx.2, align 8, !tbaa !11
  %mul.i.2 = mul nsw i64 %44, %v1
  %add.2 = add nsw i64 %mul.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.2
  %45 = load i64, i64* %arrayidx.3, align 8, !tbaa !11
  %mul.i.3 = mul nsw i64 %45, %v1
  %add.3 = add nsw i64 %mul.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !321

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i64 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i64 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %46 to i64
  %mul.i13 = mul i64 %mul.i.i, %conv.i
  %cmp.i.i = icmp eq i64 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl24custom_multiply_variableIlEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl24custom_multiply_variableIlEEvT_S2_.exit

_Z26check_shifted_variable_sumIl24custom_multiply_variableIlEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl24custom_multiply_variableIlEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %49
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %51, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %55 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il33custom_multiply_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i64 %v1, 8000
  %mul1.i.i = mul i64 %mul.i.i, %v2
  %mul2.i.i = mul i64 %mul1.i.i, %v3
  %mul3.i.i = mul i64 %mul2.i.i, %v4
  %mul.i = mul i64 %v2, %v1
  %mul1.i = mul i64 %mul.i, %v3
  %mul2.i = mul i64 %mul1.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i64, i64* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl33custom_multiply_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIl33custom_multiply_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl33custom_multiply_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i64, i64* %first, align 8, !tbaa !11
  %16 = load i64, i64* %12, align 8, !tbaa !11
  %17 = mul i64 %mul2.i, %15
  %18 = mul i64 %mul2.i, %16
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa24.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi21.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i64 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi21 = phi i64 [ %vec.phi21.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2023 = or i64 %index, 1
  %19 = getelementptr inbounds i64, i64* %first, i64 %index
  %20 = getelementptr inbounds i64, i64* %first, i64 %induction2023
  %21 = load i64, i64* %19, align 8, !tbaa !11
  %22 = load i64, i64* %20, align 8, !tbaa !11
  %23 = mul i64 %mul2.i, %21
  %24 = mul i64 %mul2.i, %22
  %25 = add nsw i64 %23, %vec.phi
  %26 = add nsw i64 %24, %vec.phi21
  %index.next = add i64 %index, 2
  %induction2023.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %28 = getelementptr inbounds i64, i64* %first, i64 %induction2023.1
  %29 = load i64, i64* %27, align 8, !tbaa !11
  %30 = load i64, i64* %28, align 8, !tbaa !11
  %31 = mul i64 %mul2.i, %29
  %32 = mul i64 %mul2.i, %30
  %33 = add nsw i64 %31, %25
  %34 = add nsw i64 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !322

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa28 = phi i64 [ %34, %vector.body ]
  %.lcssa27 = phi i64 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa24 = phi i64 [ %.lcssa24.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i64 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa27, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i64 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i64 [ 0, %overflow.checked ], [ %.lcssa24, %middle.block.loopexit ]
  %bin.rdx = add i64 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter25 = and i32 %38, 3
  %lcmp.mod26 = icmp ne i32 %xtraiter25, 0
  br i1 %lcmp.mod26, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi i64 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter25, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.prol
  %40 = load i64, i64* %arrayidx.prol, align 8, !tbaa !11
  %mul3.i.prol = mul i64 %mul2.i, %40
  %add.prol = add nsw i64 %mul3.i.prol, %result.09.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !323

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i64 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i64 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi i64 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi i64 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %42 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %mul3.i = mul i64 %mul2.i, %42
  %add = add nsw i64 %mul3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next
  %43 = load i64, i64* %arrayidx.1, align 8, !tbaa !11
  %mul3.i.1 = mul i64 %mul2.i, %43
  %add.1 = add nsw i64 %mul3.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.1
  %44 = load i64, i64* %arrayidx.2, align 8, !tbaa !11
  %mul3.i.2 = mul i64 %mul2.i, %44
  %add.2 = add nsw i64 %mul3.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.2
  %45 = load i64, i64* %arrayidx.3, align 8, !tbaa !11
  %mul3.i.3 = mul i64 %mul2.i, %45
  %add.3 = add nsw i64 %mul3.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !324

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i64 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i64 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %46 to i64
  %mul.i13 = mul i64 %mul3.i.i, %conv.i
  %cmp.i.i = icmp eq i64 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl33custom_multiply_multiple_variableIlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl33custom_multiply_multiple_variableIlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl33custom_multiply_multiple_variableIlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl33custom_multiply_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %49
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %51, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %55 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il34custom_multiply_multiple_variable2IlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul nsw i64 %v2, %v1
  %mul1.i.i = mul nsw i64 %mul.i.i, %v3
  %mul2.i.i = mul nsw i64 %mul1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert24 = insertelement <2 x i64> undef, i64 %mul2.i.i, i32 0
  %broadcast.splat25 = shufflevector <2 x i64> %broadcast.splatinsert24, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl34custom_multiply_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl34custom_multiply_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl34custom_multiply_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load23.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %broadcast.splat25, %wide.load.prol
  %17 = add <2 x i64> %broadcast.splat25, %wide.load23.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi22.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi22 = phi <2 x i64> [ %vec.phi22.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load23 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = add <2 x i64> %vec.phi, %broadcast.splat25
  %23 = add <2 x i64> %vec.phi22, %broadcast.splat25
  %24 = add <2 x i64> %22, %wide.load
  %25 = add <2 x i64> %23, %wide.load23
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load23.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = add <2 x i64> %24, %broadcast.splat25
  %31 = add <2 x i64> %25, %broadcast.splat25
  %32 = add <2 x i64> %30, %wide.load.1
  %33 = add <2 x i64> %31, %wide.load23.1
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !325

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa31 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <2 x i64> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx29 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add.i = add i64 %result.09.reg2mem.0, %mul2.i.i
  %add = add i64 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !326

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %add.i.i = add nsw i64 %conv.i, %mul2.i.i
  %mul.i13 = mul nsw i64 %add.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl34custom_multiply_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl34custom_multiply_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl34custom_multiply_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl34custom_multiply_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %40
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %45, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Il22custom_divide_variableIlEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i64, i64* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl22custom_divide_variableIlEEvT_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIl22custom_divide_variableIlEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl22custom_divide_variableIlEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i64, i64* %first, align 8, !tbaa !11
  %16 = load i64, i64* %12, align 8, !tbaa !11
  %17 = sdiv i64 %15, %v1
  %18 = sdiv i64 %16, %v1
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa24.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi21.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i64 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi21 = phi i64 [ %vec.phi21.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2023 = or i64 %index, 1
  %19 = getelementptr inbounds i64, i64* %first, i64 %index
  %20 = getelementptr inbounds i64, i64* %first, i64 %induction2023
  %21 = load i64, i64* %19, align 8, !tbaa !11
  %22 = load i64, i64* %20, align 8, !tbaa !11
  %23 = sdiv i64 %21, %v1
  %24 = sdiv i64 %22, %v1
  %25 = add nsw i64 %23, %vec.phi
  %26 = add nsw i64 %24, %vec.phi21
  %index.next = add i64 %index, 2
  %induction2023.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %28 = getelementptr inbounds i64, i64* %first, i64 %induction2023.1
  %29 = load i64, i64* %27, align 8, !tbaa !11
  %30 = load i64, i64* %28, align 8, !tbaa !11
  %31 = sdiv i64 %29, %v1
  %32 = sdiv i64 %30, %v1
  %33 = add nsw i64 %31, %25
  %34 = add nsw i64 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !327

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa28 = phi i64 [ %34, %vector.body ]
  %.lcssa27 = phi i64 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa24 = phi i64 [ %.lcssa24.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i64 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa27, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i64 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i64 [ 0, %overflow.checked ], [ %.lcssa24, %middle.block.loopexit ]
  %bin.rdx = add i64 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter25 = and i32 %38, 3
  %lcmp.mod26 = icmp ne i32 %xtraiter25, 0
  br i1 %lcmp.mod26, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi i64 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter25, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.prol
  %40 = load i64, i64* %arrayidx.prol, align 8, !tbaa !11
  %div.i.prol = sdiv i64 %40, %v1
  %add.prol = add nsw i64 %div.i.prol, %result.09.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !328

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i64 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i64 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi i64 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi i64 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %42 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %div.i = sdiv i64 %42, %v1
  %add = add nsw i64 %div.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next
  %43 = load i64, i64* %arrayidx.1, align 8, !tbaa !11
  %div.i.1 = sdiv i64 %43, %v1
  %add.1 = add nsw i64 %div.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.1
  %44 = load i64, i64* %arrayidx.2, align 8, !tbaa !11
  %div.i.2 = sdiv i64 %44, %v1
  %add.2 = add nsw i64 %div.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.2
  %45 = load i64, i64* %arrayidx.3, align 8, !tbaa !11
  %div.i.3 = sdiv i64 %45, %v1
  %add.3 = add nsw i64 %div.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !329

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i64 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i64 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %46 to i64
  %div.i.i = sdiv i64 %conv.i, %v1
  %mul.i = mul nsw i64 %div.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl22custom_divide_variableIlEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl22custom_divide_variableIlEEvT_S2_.exit

_Z26check_shifted_variable_sumIl22custom_divide_variableIlEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl22custom_divide_variableIlEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %49
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %51, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %55 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il31custom_divide_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl31custom_divide_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  %5 = phi i32 [ %31, %_Z26check_shifted_variable_sumIl31custom_divide_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl31custom_divide_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi = phi i64 [ %18, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi21 = phi i64 [ %19, %vector.body ], [ 0, %vector.body.preheader ]
  %induction2023 = or i64 %index, 1
  %6 = getelementptr inbounds i64, i64* %first, i64 %index
  %7 = getelementptr inbounds i64, i64* %first, i64 %induction2023
  %8 = load i64, i64* %6, align 8, !tbaa !11
  %9 = load i64, i64* %7, align 8, !tbaa !11
  %10 = sdiv i64 %8, %v1
  %11 = sdiv i64 %9, %v1
  %12 = sdiv i64 %10, %v2
  %13 = sdiv i64 %11, %v2
  %14 = sdiv i64 %12, %v3
  %15 = sdiv i64 %13, %v3
  %16 = sdiv i64 %14, %v4
  %17 = sdiv i64 %15, %v4
  %18 = add nsw i64 %16, %vec.phi
  %19 = add nsw i64 %17, %vec.phi21
  %index.next = add i64 %index, 2
  %20 = icmp eq i64 %index.next, %n.vec
  br i1 %20, label %middle.block.loopexit, label %vector.body, !llvm.loop !330

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa25 = phi i64 [ %19, %vector.body ]
  %.lcssa = phi i64 [ %18, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i64 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i64 [ 0, %overflow.checked ], [ %.lcssa25, %middle.block.loopexit ]
  %bin.rdx = add i64 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %21 = add i64 %resume.val, 1
  %22 = trunc i64 %21 to i32
  %23 = sub i32 %4, %22
  %24 = sub i32 %count, %22
  %xtraiter = and i32 %23, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %arrayidx.prol = getelementptr inbounds i64, i64* %first, i64 %resume.val
  %25 = load i64, i64* %arrayidx.prol, align 8, !tbaa !11
  %div.i.prol = sdiv i64 %25, %v1
  %div1.i.prol = sdiv i64 %div.i.prol, %v2
  %div2.i.prol = sdiv i64 %div1.i.prol, %v3
  %div3.i.prol = sdiv i64 %div2.i.prol, %v4
  %add.prol = add nsw i64 %div3.i.prol, %bin.rdx
  %indvars.iv.next.prol = add nuw nsw i64 %resume.val, 1
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi i64 [ 0, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi i64 [ %bin.rdx, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %26 = icmp ult i32 %24, 1
  br i1 %26, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi i64 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %27 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %div.i = sdiv i64 %27, %v1
  %div1.i = sdiv i64 %div.i, %v2
  %div2.i = sdiv i64 %div1.i, %v3
  %div3.i = sdiv i64 %div2.i, %v4
  %add = add nsw i64 %div3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next
  %28 = load i64, i64* %arrayidx.1, align 8, !tbaa !11
  %div.i.1 = sdiv i64 %28, %v1
  %div1.i.1 = sdiv i64 %div.i.1, %v2
  %div2.i.1 = sdiv i64 %div1.i.1, %v3
  %div3.i.1 = sdiv i64 %div2.i.1, %v4
  %add.1 = add nsw i64 %div3.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !331

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi i64 [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i64 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %29 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %29 to i64
  %div.i.i = sdiv i64 %conv.i, %v1
  %div1.i.i = sdiv i64 %div.i.i, %v2
  %div2.i.i = sdiv i64 %div1.i.i, %v3
  %div3.i.i = sdiv i64 %div2.i.i, %v4
  %mul.i = mul nsw i64 %div3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl31custom_divide_multiple_variableIlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %30 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %30) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl31custom_divide_multiple_variableIlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl31custom_divide_multiple_variableIlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %31 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %31
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl31custom_divide_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %32 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %32
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %33 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %33, null
  %34 = bitcast %struct.one_result* %33 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %35 = load i32, i32* @current_test, align 4, !tbaa !5
  %36 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %35, %36
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %37 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %36, %lor.lhs.false.i ]
  %add.i = add nsw i32 %37, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %34, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %38 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %39 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %39) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %40 = phi %struct.one_result* [ %38, %if.then.if.end5_crit_edge.i ], [ %33, %lor.lhs.false.i ]
  %41 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %35, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %41 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %41, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il32custom_divide_multiple_variable2IlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %div.i.i = sdiv i64 %v1, %v2
  %div1.i.i = sdiv i64 %div.i.i, %v3
  %div2.i.i = sdiv i64 %div1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert24 = insertelement <2 x i64> undef, i64 %div2.i.i, i32 0
  %broadcast.splat25 = shufflevector <2 x i64> %broadcast.splatinsert24, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl32custom_divide_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl32custom_divide_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl32custom_divide_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load23.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %wide.load.prol, %broadcast.splat25
  %17 = add <2 x i64> %wide.load23.prol, %broadcast.splat25
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi22.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi22 = phi <2 x i64> [ %vec.phi22.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load23 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = add <2 x i64> %wide.load, %vec.phi
  %23 = add <2 x i64> %wide.load23, %vec.phi22
  %24 = add <2 x i64> %22, %broadcast.splat25
  %25 = add <2 x i64> %23, %broadcast.splat25
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load23.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = add <2 x i64> %wide.load.1, %24
  %31 = add <2 x i64> %wide.load23.1, %25
  %32 = add <2 x i64> %30, %broadcast.splat25
  %33 = add <2 x i64> %31, %broadcast.splat25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !332

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa31 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <2 x i64> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx29 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add.i = add i64 %36, %result.09.reg2mem.0
  %add = add i64 %add.i, %div2.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !333

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %add.i.i = add nsw i64 %div2.i.i, %conv.i
  %mul.i = mul nsw i64 %add.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl32custom_divide_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl32custom_divide_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl32custom_divide_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl32custom_divide_multiple_variable2IlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %45, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il30custom_mixed_multiple_variableIlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul nsw i64 %v3, %v2
  %div.i.i = sdiv i64 %mul.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat27 = shufflevector <2 x i64> %broadcast.splatinsert26, <2 x i64> undef, <2 x i32> zeroinitializer
  %broadcast.splatinsert28 = insertelement <2 x i64> undef, i64 %div.i.i, i32 0
  %broadcast.splat29 = shufflevector <2 x i64> %broadcast.splatinsert28, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl30custom_mixed_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %45, %_Z26check_shifted_variable_sumIl30custom_mixed_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl30custom_mixed_multiple_variableIlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load25.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %broadcast.splat27, %wide.load.prol
  %17 = add <2 x i64> %broadcast.splat27, %wide.load25.prol
  %18 = sub <2 x i64> %16, %broadcast.splat29
  %19 = sub <2 x i64> %17, %broadcast.splat29
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa34.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi24.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %38, %vector.body ]
  %vec.phi24 = phi <2 x i64> [ %vec.phi24.unr, %vector.ph.split.split ], [ %39, %vector.body ]
  %20 = getelementptr inbounds i64, i64* %first, i64 %index
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = getelementptr i64, i64* %20, i64 2
  %23 = bitcast i64* %22 to <2 x i64>*
  %wide.load25 = load <2 x i64>, <2 x i64>* %23, align 8, !tbaa !11
  %24 = add <2 x i64> %vec.phi, %broadcast.splat27
  %25 = add <2 x i64> %vec.phi24, %broadcast.splat27
  %26 = add <2 x i64> %24, %wide.load
  %27 = add <2 x i64> %25, %wide.load25
  %28 = sub <2 x i64> %26, %broadcast.splat29
  %29 = sub <2 x i64> %27, %broadcast.splat29
  %index.next = add i64 %index, 4
  %30 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %31 = bitcast i64* %30 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %31, align 8, !tbaa !11
  %32 = getelementptr i64, i64* %30, i64 2
  %33 = bitcast i64* %32 to <2 x i64>*
  %wide.load25.1 = load <2 x i64>, <2 x i64>* %33, align 8, !tbaa !11
  %34 = add <2 x i64> %28, %broadcast.splat27
  %35 = add <2 x i64> %29, %broadcast.splat27
  %36 = add <2 x i64> %34, %wide.load.1
  %37 = add <2 x i64> %35, %wide.load25.1
  %38 = sub <2 x i64> %36, %broadcast.splat29
  %39 = sub <2 x i64> %37, %broadcast.splat29
  %index.next.1 = add i64 %index.next, 4
  %40 = icmp eq i64 %index.next.1, %n.vec
  br i1 %40, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !334

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa36 = phi <2 x i64> [ %39, %vector.body ]
  %.lcssa35 = phi <2 x i64> [ %38, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa34 = phi <2 x i64> [ %.lcssa34.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa35, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa34, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx33 = add <2 x i64> %bin.rdx, %rdx.shuf
  %41 = extractelement <2 x i64> %bin.rdx33, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %41, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %42 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add.i = add i64 %result.09.reg2mem.0, %v1
  %sub.i = add i64 %add.i, %42
  %add = sub i64 %sub.i, %div.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !335

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %41, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %43 to i64
  %add.i.i = add nsw i64 %conv.i, %v1
  %sub.i.i = sub i64 %add.i.i, %div.i.i
  %mul.i13 = mul nsw i64 %sub.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl30custom_mixed_multiple_variableIlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl30custom_mixed_multiple_variableIlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl30custom_mixed_multiple_variableIlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %45
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl30custom_mixed_multiple_variableIlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i15 = sub nsw i64 %call.i14, %46
  %conv.i16 = sitofp i64 %sub.i15 to double
  %div.i17 = fdiv double %conv.i16, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end6
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i18 = add nsw i32 %51, 10
  store i32 %add.i18, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i18 to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %48, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %52 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i17, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Il19custom_variable_andIlEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl19custom_variable_andIlEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl19custom_variable_andIlEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl19custom_variable_andIlEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = and <2 x i64> %wide.load.prol, %broadcast.splat23
  %17 = and <2 x i64> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = and <2 x i64> %wide.load, %broadcast.splat23
  %23 = and <2 x i64> %wide.load21, %broadcast.splat23
  %24 = add nsw <2 x i64> %22, %vec.phi
  %25 = add nsw <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = and <2 x i64> %wide.load.1, %broadcast.splat23
  %31 = and <2 x i64> %wide.load21.1, %broadcast.splat23
  %32 = add nsw <2 x i64> %30, %24
  %33 = add nsw <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !336

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %and.i = and i64 %36, %v1
  %add = add nsw i64 %and.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !337

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %and.i.i = and i64 %conv.i, %v1
  %mul.i = mul nsw i64 %and.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl19custom_variable_andIlEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl19custom_variable_andIlEEvT_S2_.exit

_Z26check_shifted_variable_sumIl19custom_variable_andIlEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl19custom_variable_andIlEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il28custom_multiple_variable_andIlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %and.i.i = and i64 %v2, %v1
  %and1.i.i = and i64 %and.i.i, %v3
  %and2.i.i = and i64 %and1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %and2.i.i, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl28custom_multiple_variable_andIlEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl28custom_multiple_variable_andIlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl28custom_multiple_variable_andIlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = and <2 x i64> %broadcast.splat23, %wide.load.prol
  %17 = and <2 x i64> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = and <2 x i64> %broadcast.splat23, %wide.load
  %23 = and <2 x i64> %broadcast.splat23, %wide.load21
  %24 = add nsw <2 x i64> %22, %vec.phi
  %25 = add nsw <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = and <2 x i64> %broadcast.splat23, %wide.load.1
  %31 = and <2 x i64> %broadcast.splat23, %wide.load21.1
  %32 = add nsw <2 x i64> %30, %24
  %33 = add nsw <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !338

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %and3.i = and i64 %and2.i.i, %36
  %add = add nsw i64 %and3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !339

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %and3.i.i = and i64 %and2.i.i, %conv.i
  %mul.i = mul nsw i64 %and3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl28custom_multiple_variable_andIlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl28custom_multiple_variable_andIlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl28custom_multiple_variable_andIlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl28custom_multiple_variable_andIlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Il18custom_variable_orIlEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl18custom_variable_orIlEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl18custom_variable_orIlEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl18custom_variable_orIlEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = or <2 x i64> %wide.load.prol, %broadcast.splat23
  %17 = or <2 x i64> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = or <2 x i64> %wide.load, %broadcast.splat23
  %23 = or <2 x i64> %wide.load21, %broadcast.splat23
  %24 = add nsw <2 x i64> %22, %vec.phi
  %25 = add nsw <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = or <2 x i64> %wide.load.1, %broadcast.splat23
  %31 = or <2 x i64> %wide.load21.1, %broadcast.splat23
  %32 = add nsw <2 x i64> %30, %24
  %33 = add nsw <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !340

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %or.i = or i64 %36, %v1
  %add = add nsw i64 %or.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !341

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %or.i.i = or i64 %conv.i, %v1
  %mul.i = mul nsw i64 %or.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl18custom_variable_orIlEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl18custom_variable_orIlEEvT_S2_.exit

_Z26check_shifted_variable_sumIl18custom_variable_orIlEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl18custom_variable_orIlEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il27custom_multiple_variable_orIlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %or.i.i = or i64 %v2, %v1
  %or1.i.i = or i64 %or.i.i, %v3
  %or2.i.i = or i64 %or1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %or2.i.i, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl27custom_multiple_variable_orIlEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl27custom_multiple_variable_orIlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl27custom_multiple_variable_orIlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = or <2 x i64> %broadcast.splat23, %wide.load.prol
  %17 = or <2 x i64> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = or <2 x i64> %broadcast.splat23, %wide.load
  %23 = or <2 x i64> %broadcast.splat23, %wide.load21
  %24 = add nsw <2 x i64> %22, %vec.phi
  %25 = add nsw <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = or <2 x i64> %broadcast.splat23, %wide.load.1
  %31 = or <2 x i64> %broadcast.splat23, %wide.load21.1
  %32 = add nsw <2 x i64> %30, %24
  %33 = add nsw <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !342

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %or3.i = or i64 %or2.i.i, %36
  %add = add nsw i64 %or3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !343

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %or3.i.i = or i64 %or2.i.i, %conv.i
  %mul.i = mul nsw i64 %or3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl27custom_multiple_variable_orIlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl27custom_multiple_variable_orIlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl27custom_multiple_variable_orIlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl27custom_multiple_variable_orIlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Il19custom_variable_xorIlEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl19custom_variable_xorIlEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl19custom_variable_xorIlEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl19custom_variable_xorIlEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = xor <2 x i64> %wide.load.prol, %broadcast.splat23
  %17 = xor <2 x i64> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = xor <2 x i64> %wide.load, %broadcast.splat23
  %23 = xor <2 x i64> %wide.load21, %broadcast.splat23
  %24 = add nsw <2 x i64> %22, %vec.phi
  %25 = add nsw <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = xor <2 x i64> %wide.load.1, %broadcast.splat23
  %31 = xor <2 x i64> %wide.load21.1, %broadcast.splat23
  %32 = add nsw <2 x i64> %30, %24
  %33 = add nsw <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !344

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %xor.i = xor i64 %36, %v1
  %add = add nsw i64 %xor.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !345

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %xor.i.i = xor i64 %conv.i, %v1
  %mul.i = mul nsw i64 %xor.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl19custom_variable_xorIlEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl19custom_variable_xorIlEEvT_S2_.exit

_Z26check_shifted_variable_sumIl19custom_variable_xorIlEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl19custom_variable_xorIlEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Il28custom_multiple_variable_xorIlEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %xor.i.i = xor i64 %v2, %v1
  %xor1.i.i = xor i64 %xor.i.i, %v3
  %xor2.i.i = xor i64 %xor1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %xor2.i.i, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIl28custom_multiple_variable_xorIlEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIl28custom_multiple_variable_xorIlEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIl28custom_multiple_variable_xorIlEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = xor <2 x i64> %broadcast.splat23, %wide.load.prol
  %17 = xor <2 x i64> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = xor <2 x i64> %broadcast.splat23, %wide.load
  %23 = xor <2 x i64> %broadcast.splat23, %wide.load21
  %24 = add nsw <2 x i64> %22, %vec.phi
  %25 = add nsw <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = xor <2 x i64> %broadcast.splat23, %wide.load.1
  %31 = xor <2 x i64> %broadcast.splat23, %wide.load21.1
  %32 = add nsw <2 x i64> %30, %24
  %33 = add nsw <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !346

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %xor3.i = xor i64 %xor2.i.i, %36
  %add = add nsw i64 %xor3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !347

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptosi double %37 to i64
  %xor3.i.i = xor i64 %xor2.i.i, %conv.i
  %mul.i = mul nsw i64 %xor3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIl28custom_multiple_variable_xorIlEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIl28custom_multiple_variable_xorIlEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIl28custom_multiple_variable_xorIlEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIl28custom_multiple_variable_xorIlEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Im19custom_add_variableImEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat24 = shufflevector <2 x i64> %broadcast.splatinsert23, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load22.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %broadcast.splat24, %wide.load.prol
  %17 = add <2 x i64> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa29.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <2 x i64> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load22 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = add <2 x i64> %vec.phi, %broadcast.splat24
  %23 = add <2 x i64> %vec.phi21, %broadcast.splat24
  %24 = add <2 x i64> %22, %wide.load
  %25 = add <2 x i64> %23, %wide.load22
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load22.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = add <2 x i64> %24, %broadcast.splat24
  %31 = add <2 x i64> %25, %broadcast.splat24
  %32 = add <2 x i64> %30, %wide.load.1
  %33 = add <2 x i64> %31, %wide.load22.1
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !348

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa31 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa30 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa29 = phi <2 x i64> [ %.lcssa29.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa29, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx28 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx28, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add.i = add i64 %result.09.reg2mem.0, %v1
  %add = add i64 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !349

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %add.i.i = add i64 %conv.i, %v1
  %mul.i = mul i64 %add.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit

_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %45, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1Im19custom_add_variableImEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end7

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %conv = sext i32 %count to i64
  %mul = mul i64 %conv, %v1
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = lshr i64 %2, 2
  %4 = mul i64 %3, 4
  %5 = add i64 %4, -4
  %6 = lshr i64 %5, 2
  %7 = add i64 %6, 1
  %backedge.overflow = icmp eq i32 %count, 0
  %n.vec = and i64 %1, -4
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %7, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %8 = icmp ult i64 %6, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit
  %9 = phi i32 [ %44, %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc6, %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %polly.stmt.for.inc.preheader, label %for.end

polly.stmt.for.inc.preheader:                     ; preds = %for.cond1.preheader
  br i1 %backedge.overflow, label %polly.stmt.for.inc.preheader26, label %overflow.checked

polly.stmt.for.inc.preheader26:                   ; preds = %middle.block, %polly.stmt.for.inc.preheader
  %result.09.reg2mem.0.ph = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %41, %middle.block ]
  %polly.indvar.ph = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %resume.val, %middle.block ]
  br label %polly.stmt.for.inc

overflow.checked:                                 ; preds = %polly.stmt.for.inc.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.preheader.split

vector.body.prol.preheader:                       ; preds = %vector.body.preheader
  br label %vector.body.prol

vector.body.prol:                                 ; preds = %vector.body.prol.preheader, %vector.body.prol
  %index.prol = phi i64 [ %index.next.prol, %vector.body.prol ], [ 0, %vector.body.prol.preheader ]
  %vec.phi.prol = phi <2 x i64> [ %14, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %vec.phi19.prol = phi <2 x i64> [ %15, %vector.body.prol ], [ zeroinitializer, %vector.body.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %vector.body.prol ], [ %xtraiter, %vector.body.prol.preheader ]
  %10 = getelementptr i64, i64* %first, i64 %index.prol
  %11 = bitcast i64* %10 to <2 x i64>*
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !alias.scope !350, !noalias !352
  %12 = getelementptr i64, i64* %10, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !alias.scope !350, !noalias !352
  %14 = add <2 x i64> %wide.load.prol, %vec.phi.prol
  %15 = add <2 x i64> %wide.load21.prol, %vec.phi19.prol
  %index.next.prol = add i64 %index.prol, 4
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %vector.body.prol, label %vector.body.preheader.split.loopexit, !llvm.loop !357

vector.body.preheader.split.loopexit:             ; preds = %vector.body.prol
  %index.next.prol.lcssa = phi i64 [ %index.next.prol, %vector.body.prol ]
  %.lcssa31 = phi <2 x i64> [ %15, %vector.body.prol ]
  %.lcssa30 = phi <2 x i64> [ %14, %vector.body.prol ]
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.preheader.split.loopexit, %vector.body.preheader
  %.lcssa27.unr = phi <2 x i64> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa31, %vector.body.preheader.split.loopexit ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa30, %vector.body.preheader.split.loopexit ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ %index.next.prol.lcssa, %vector.body.preheader.split.loopexit ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa30, %vector.body.preheader.split.loopexit ]
  %vec.phi19.unr = phi <2 x i64> [ zeroinitializer, %vector.body.preheader ], [ %.lcssa31, %vector.body.preheader.split.loopexit ]
  br i1 %8, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.3, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %38, %vector.body ]
  %vec.phi19 = phi <2 x i64> [ %vec.phi19.unr, %vector.body.preheader.split.split ], [ %39, %vector.body ]
  %16 = getelementptr i64, i64* %first, i64 %index
  %17 = bitcast i64* %16 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %17, align 8, !alias.scope !350, !noalias !352
  %18 = getelementptr i64, i64* %16, i64 2
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %19, align 8, !alias.scope !350, !noalias !352
  %20 = add <2 x i64> %wide.load, %vec.phi
  %21 = add <2 x i64> %wide.load21, %vec.phi19
  %index.next = add i64 %index, 4
  %22 = getelementptr i64, i64* %first, i64 %index.next
  %23 = bitcast i64* %22 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %23, align 8, !alias.scope !350, !noalias !352
  %24 = getelementptr i64, i64* %22, i64 2
  %25 = bitcast i64* %24 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %25, align 8, !alias.scope !350, !noalias !352
  %26 = add <2 x i64> %wide.load.1, %20
  %27 = add <2 x i64> %wide.load21.1, %21
  %index.next.1 = add i64 %index.next, 4
  %28 = getelementptr i64, i64* %first, i64 %index.next.1
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load.2 = load <2 x i64>, <2 x i64>* %29, align 8, !alias.scope !350, !noalias !352
  %30 = getelementptr i64, i64* %28, i64 2
  %31 = bitcast i64* %30 to <2 x i64>*
  %wide.load21.2 = load <2 x i64>, <2 x i64>* %31, align 8, !alias.scope !350, !noalias !352
  %32 = add <2 x i64> %wide.load.2, %26
  %33 = add <2 x i64> %wide.load21.2, %27
  %index.next.2 = add i64 %index.next.1, 4
  %34 = getelementptr i64, i64* %first, i64 %index.next.2
  %35 = bitcast i64* %34 to <2 x i64>*
  %wide.load.3 = load <2 x i64>, <2 x i64>* %35, align 8, !alias.scope !350, !noalias !352
  %36 = getelementptr i64, i64* %34, i64 2
  %37 = bitcast i64* %36 to <2 x i64>*
  %wide.load21.3 = load <2 x i64>, <2 x i64>* %37, align 8, !alias.scope !350, !noalias !352
  %38 = add <2 x i64> %wide.load.3, %32
  %39 = add <2 x i64> %wide.load21.3, %33
  %index.next.3 = add i64 %index.next.2, 4
  %40 = icmp eq i64 %index.next.3, %n.vec
  br i1 %40, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !358

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa29 = phi <2 x i64> [ %39, %vector.body ]
  %.lcssa28 = phi <2 x i64> [ %38, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa27 = phi <2 x i64> [ %.lcssa27.unr, %vector.body.preheader.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi24 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa27, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi24, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx25 = add <2 x i64> %bin.rdx, %rdx.shuf
  %41 = extractelement <2 x i64> %bin.rdx25, i32 0
  %cmp.n = icmp eq i64 %1, %resume.val
  br i1 %cmp.n, label %for.end, label %polly.stmt.for.inc.preheader26

for.end.loopexit:                                 ; preds = %polly.stmt.for.inc
  %p_add.lcssa = phi i64 [ %p_add, %polly.stmt.for.inc ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %41, %middle.block ], [ %p_add.lcssa, %for.end.loopexit ]
  %add4 = add i64 %result.0.lcssa.reg2mem.0, %mul
  %42 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %42 to i64
  %add.i.i = add i64 %conv.i, %v1
  %mul.i = mul i64 %add.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %add4
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %43) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit

_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %44 = phi i32 [ %9, %for.end ], [ %.pre, %if.then.i ]
  %inc6 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc6, %44
  br i1 %cmp, label %for.cond1.preheader, label %for.end7.loopexit

for.end7.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm19custom_add_variableImEEvT_S2_.exit
  br label %for.end7

for.end7:                                         ; preds = %for.end7.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %45 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %45
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %46 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %46, null
  %47 = bitcast %struct.one_result* %46 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end7
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end7
  %48 = load i32, i32* @current_test, align 4, !tbaa !5
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %48, %49
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %50 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %add.i = add nsw i32 %50, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %47, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %51 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %52 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %52) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %53 = phi %struct.one_result* [ %51, %if.then.if.end5_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %54 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %48, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %54 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %53, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %53, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %54, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void

polly.stmt.for.inc:                               ; preds = %polly.stmt.for.inc.preheader26, %polly.stmt.for.inc
  %result.09.reg2mem.0 = phi i64 [ %p_add, %polly.stmt.for.inc ], [ %result.09.reg2mem.0.ph, %polly.stmt.for.inc.preheader26 ]
  %polly.indvar = phi i64 [ %polly.indvar_next, %polly.stmt.for.inc ], [ %polly.indvar.ph, %polly.stmt.for.inc.preheader26 ]
  %scevgep = getelementptr i64, i64* %first, i64 %polly.indvar
  %_p_scalar_ = load i64, i64* %scevgep, align 8, !alias.scope !350, !noalias !352
  %p_add = add i64 %_p_scalar_, %result.09.reg2mem.0
  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
  %exitcond = icmp eq i64 %polly.indvar_next, %conv
  br i1 %exitcond, label %for.end.loopexit, label %polly.stmt.for.inc, !llvm.loop !359
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im28custom_add_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %add.i.i = add i64 %v2, %v1
  %add1.i.i = add i64 %add.i.i, %v3
  %add2.i.i = add i64 %add1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <2 x i64> undef, i64 %add2.i.i, i32 0
  %broadcast.splat24 = shufflevector <2 x i64> %broadcast.splatinsert23, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm28custom_add_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm28custom_add_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm28custom_add_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load22.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %broadcast.splat24, %wide.load.prol
  %17 = add <2 x i64> %broadcast.splat24, %wide.load22.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa29.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <2 x i64> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load22 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = add <2 x i64> %broadcast.splat24, %vec.phi
  %23 = add <2 x i64> %broadcast.splat24, %vec.phi21
  %24 = add <2 x i64> %22, %wide.load
  %25 = add <2 x i64> %23, %wide.load22
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load22.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = add <2 x i64> %broadcast.splat24, %24
  %31 = add <2 x i64> %broadcast.splat24, %25
  %32 = add <2 x i64> %30, %wide.load.1
  %33 = add <2 x i64> %31, %wide.load22.1
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !360

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa31 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa30 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa29 = phi <2 x i64> [ %.lcssa29.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa29, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx28 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx28, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add3.i = add i64 %add2.i.i, %result.09.reg2mem.0
  %add = add i64 %add3.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !361

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %add3.i.i = add i64 %add2.i.i, %conv.i
  %mul.i = mul i64 %add3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm28custom_add_multiple_variableImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm28custom_add_multiple_variableImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm28custom_add_multiple_variableImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm28custom_add_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %45, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Im19custom_sub_variableImEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert23 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat24 = shufflevector <2 x i64> %broadcast.splatinsert23, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm19custom_sub_variableImEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm19custom_sub_variableImEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm19custom_sub_variableImEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load22.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = sub <2 x i64> %wide.load.prol, %broadcast.splat24
  %17 = sub <2 x i64> %wide.load22.prol, %broadcast.splat24
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa29.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi21.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi21 = phi <2 x i64> [ %vec.phi21.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load22 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = sub <2 x i64> %wide.load, %broadcast.splat24
  %23 = sub <2 x i64> %wide.load22, %broadcast.splat24
  %24 = add <2 x i64> %22, %vec.phi
  %25 = add <2 x i64> %23, %vec.phi21
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load22.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = sub <2 x i64> %wide.load.1, %broadcast.splat24
  %31 = sub <2 x i64> %wide.load22.1, %broadcast.splat24
  %32 = add <2 x i64> %30, %24
  %33 = add <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !362

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa31 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa30 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa29 = phi <2 x i64> [ %.lcssa29.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi27 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa29, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi27, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx28 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx28, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %sub.i = sub i64 %36, %v1
  %add = add i64 %sub.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !363

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %sub.i.i = sub i64 %conv.i, %v1
  %mul.i = mul i64 %sub.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm19custom_sub_variableImEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm19custom_sub_variableImEEvT_S2_.exit

_Z26check_shifted_variable_sumIm19custom_sub_variableImEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm19custom_sub_variableImEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %40
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %42, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %46 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im28custom_sub_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %sum = add i64 %v2, %v1
  %sum20 = add i64 %sum, %v3
  %sum21 = add i64 %sum20, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert28 = insertelement <2 x i64> undef, i64 %sum21, i32 0
  %broadcast.splat29 = shufflevector <2 x i64> %broadcast.splatinsert28, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = sub <2 x i64> zeroinitializer, %broadcast.splat29
  %15 = sub <2 x i64> zeroinitializer, %broadcast.splat29
  %16 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm28custom_sub_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  %17 = phi i32 [ %41, %_Z26check_shifted_variable_sumIm28custom_sub_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm28custom_sub_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load27.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %18 = add <2 x i64> %14, %wide.load.prol
  %19 = add <2 x i64> %15, %wide.load27.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa34.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi26.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %16, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %34, %vector.body ]
  %vec.phi26 = phi <2 x i64> [ %vec.phi26.unr, %vector.ph.split.split ], [ %35, %vector.body ]
  %20 = getelementptr inbounds i64, i64* %first, i64 %index
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = getelementptr i64, i64* %20, i64 2
  %23 = bitcast i64* %22 to <2 x i64>*
  %wide.load27 = load <2 x i64>, <2 x i64>* %23, align 8, !tbaa !11
  %24 = sub <2 x i64> %vec.phi, %broadcast.splat29
  %25 = sub <2 x i64> %vec.phi26, %broadcast.splat29
  %26 = add <2 x i64> %24, %wide.load
  %27 = add <2 x i64> %25, %wide.load27
  %index.next = add i64 %index, 4
  %28 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = getelementptr i64, i64* %28, i64 2
  %31 = bitcast i64* %30 to <2 x i64>*
  %wide.load27.1 = load <2 x i64>, <2 x i64>* %31, align 8, !tbaa !11
  %32 = sub <2 x i64> %26, %broadcast.splat29
  %33 = sub <2 x i64> %27, %broadcast.splat29
  %34 = add <2 x i64> %32, %wide.load.1
  %35 = add <2 x i64> %33, %wide.load27.1
  %index.next.1 = add i64 %index.next, 4
  %36 = icmp eq i64 %index.next.1, %n.vec
  br i1 %36, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !364

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa36 = phi <2 x i64> [ %35, %vector.body ]
  %.lcssa35 = phi <2 x i64> [ %34, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa34 = phi <2 x i64> [ %.lcssa34.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa35, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa34, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx33 = add <2 x i64> %bin.rdx, %rdx.shuf
  %37 = extractelement <2 x i64> %bin.rdx33, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %37, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %38 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %sub3.i = sub i64 %result.09.reg2mem.0, %sum21
  %add = add i64 %sub3.i, %38
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !365

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %37, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %39 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %39 to i64
  %sub3.i.i = sub i64 %conv.i, %sum21
  %mul.i = mul i64 %sub3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm28custom_sub_multiple_variableImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %40 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %40) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm28custom_sub_multiple_variableImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm28custom_sub_multiple_variableImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %41 = phi i32 [ %17, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %41
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm28custom_sub_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %42 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %42
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %43 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %43, null
  %44 = bitcast %struct.one_result* %43 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %45 = load i32, i32* @current_test, align 4, !tbaa !5
  %46 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %45, %46
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %47 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %46, %lor.lhs.false.i ]
  %add.i = add nsw i32 %47, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %44, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %48 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %49 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %49) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %50 = phi %struct.one_result* [ %48, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %51 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %45, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %51 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %50, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %51, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Im24custom_multiply_variableImEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i64 %v1, 8000
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i64, i64* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm24custom_multiply_variableImEEvT_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIm24custom_multiply_variableImEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm24custom_multiply_variableImEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i64, i64* %first, align 8, !tbaa !11
  %16 = load i64, i64* %12, align 8, !tbaa !11
  %17 = mul i64 %15, %v1
  %18 = mul i64 %16, %v1
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa24.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi21.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i64 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi21 = phi i64 [ %vec.phi21.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2023 = or i64 %index, 1
  %19 = getelementptr inbounds i64, i64* %first, i64 %index
  %20 = getelementptr inbounds i64, i64* %first, i64 %induction2023
  %21 = load i64, i64* %19, align 8, !tbaa !11
  %22 = load i64, i64* %20, align 8, !tbaa !11
  %23 = mul i64 %21, %v1
  %24 = mul i64 %22, %v1
  %25 = add i64 %23, %vec.phi
  %26 = add i64 %24, %vec.phi21
  %index.next = add i64 %index, 2
  %induction2023.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %28 = getelementptr inbounds i64, i64* %first, i64 %induction2023.1
  %29 = load i64, i64* %27, align 8, !tbaa !11
  %30 = load i64, i64* %28, align 8, !tbaa !11
  %31 = mul i64 %29, %v1
  %32 = mul i64 %30, %v1
  %33 = add i64 %31, %25
  %34 = add i64 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !366

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa28 = phi i64 [ %34, %vector.body ]
  %.lcssa27 = phi i64 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa24 = phi i64 [ %.lcssa24.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i64 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa27, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i64 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i64 [ 0, %overflow.checked ], [ %.lcssa24, %middle.block.loopexit ]
  %bin.rdx = add i64 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter25 = and i32 %38, 3
  %lcmp.mod26 = icmp ne i32 %xtraiter25, 0
  br i1 %lcmp.mod26, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi i64 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter25, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.prol
  %40 = load i64, i64* %arrayidx.prol, align 8, !tbaa !11
  %mul.i.prol = mul i64 %40, %v1
  %add.prol = add i64 %mul.i.prol, %result.09.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !367

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i64 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i64 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi i64 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi i64 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %42 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %mul.i = mul i64 %42, %v1
  %add = add i64 %mul.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next
  %43 = load i64, i64* %arrayidx.1, align 8, !tbaa !11
  %mul.i.1 = mul i64 %43, %v1
  %add.1 = add i64 %mul.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.1
  %44 = load i64, i64* %arrayidx.2, align 8, !tbaa !11
  %mul.i.2 = mul i64 %44, %v1
  %add.2 = add i64 %mul.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.2
  %45 = load i64, i64* %arrayidx.3, align 8, !tbaa !11
  %mul.i.3 = mul i64 %45, %v1
  %add.3 = add i64 %mul.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !368

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i64 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i64 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %46 to i64
  %mul.i13 = mul i64 %mul.i.i, %conv.i
  %cmp.i.i = icmp eq i64 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm24custom_multiply_variableImEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm24custom_multiply_variableImEEvT_S2_.exit

_Z26check_shifted_variable_sumIm24custom_multiply_variableImEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm24custom_multiply_variableImEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %49
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %51, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %55 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im33custom_multiply_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i64 %v1, 8000
  %mul1.i.i = mul i64 %mul.i.i, %v2
  %mul2.i.i = mul i64 %mul1.i.i, %v3
  %mul3.i.i = mul i64 %mul2.i.i, %v4
  %mul.i = mul i64 %v2, %v1
  %mul1.i = mul i64 %mul.i, %v3
  %mul2.i = mul i64 %mul1.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i64, i64* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm33custom_multiply_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIm33custom_multiply_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm33custom_multiply_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i64, i64* %first, align 8, !tbaa !11
  %16 = load i64, i64* %12, align 8, !tbaa !11
  %17 = mul i64 %mul2.i, %15
  %18 = mul i64 %mul2.i, %16
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa24.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi21.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i64 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi21 = phi i64 [ %vec.phi21.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2023 = or i64 %index, 1
  %19 = getelementptr inbounds i64, i64* %first, i64 %index
  %20 = getelementptr inbounds i64, i64* %first, i64 %induction2023
  %21 = load i64, i64* %19, align 8, !tbaa !11
  %22 = load i64, i64* %20, align 8, !tbaa !11
  %23 = mul i64 %mul2.i, %21
  %24 = mul i64 %mul2.i, %22
  %25 = add i64 %23, %vec.phi
  %26 = add i64 %24, %vec.phi21
  %index.next = add i64 %index, 2
  %induction2023.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %28 = getelementptr inbounds i64, i64* %first, i64 %induction2023.1
  %29 = load i64, i64* %27, align 8, !tbaa !11
  %30 = load i64, i64* %28, align 8, !tbaa !11
  %31 = mul i64 %mul2.i, %29
  %32 = mul i64 %mul2.i, %30
  %33 = add i64 %31, %25
  %34 = add i64 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !369

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa28 = phi i64 [ %34, %vector.body ]
  %.lcssa27 = phi i64 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa24 = phi i64 [ %.lcssa24.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i64 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa27, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i64 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i64 [ 0, %overflow.checked ], [ %.lcssa24, %middle.block.loopexit ]
  %bin.rdx = add i64 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter25 = and i32 %38, 3
  %lcmp.mod26 = icmp ne i32 %xtraiter25, 0
  br i1 %lcmp.mod26, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi i64 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter25, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.prol
  %40 = load i64, i64* %arrayidx.prol, align 8, !tbaa !11
  %mul3.i.prol = mul i64 %mul2.i, %40
  %add.prol = add i64 %mul3.i.prol, %result.09.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !370

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i64 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i64 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi i64 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi i64 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %42 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %mul3.i = mul i64 %mul2.i, %42
  %add = add i64 %mul3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next
  %43 = load i64, i64* %arrayidx.1, align 8, !tbaa !11
  %mul3.i.1 = mul i64 %mul2.i, %43
  %add.1 = add i64 %mul3.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.1
  %44 = load i64, i64* %arrayidx.2, align 8, !tbaa !11
  %mul3.i.2 = mul i64 %mul2.i, %44
  %add.2 = add i64 %mul3.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.2
  %45 = load i64, i64* %arrayidx.3, align 8, !tbaa !11
  %mul3.i.3 = mul i64 %mul2.i, %45
  %add.3 = add i64 %mul3.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !371

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i64 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i64 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %46 to i64
  %mul.i13 = mul i64 %mul3.i.i, %conv.i
  %cmp.i.i = icmp eq i64 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm33custom_multiply_multiple_variableImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm33custom_multiply_multiple_variableImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm33custom_multiply_multiple_variableImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm33custom_multiply_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %49
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %51, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %55 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im34custom_multiply_multiple_variable2ImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i64 %v2, %v1
  %mul1.i.i = mul i64 %mul.i.i, %v3
  %mul2.i.i = mul i64 %mul1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert24 = insertelement <2 x i64> undef, i64 %mul2.i.i, i32 0
  %broadcast.splat25 = shufflevector <2 x i64> %broadcast.splatinsert24, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm34custom_multiply_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm34custom_multiply_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm34custom_multiply_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load23.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %broadcast.splat25, %wide.load.prol
  %17 = add <2 x i64> %broadcast.splat25, %wide.load23.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi22.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi22 = phi <2 x i64> [ %vec.phi22.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load23 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = add <2 x i64> %vec.phi, %broadcast.splat25
  %23 = add <2 x i64> %vec.phi22, %broadcast.splat25
  %24 = add <2 x i64> %22, %wide.load
  %25 = add <2 x i64> %23, %wide.load23
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load23.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = add <2 x i64> %24, %broadcast.splat25
  %31 = add <2 x i64> %25, %broadcast.splat25
  %32 = add <2 x i64> %30, %wide.load.1
  %33 = add <2 x i64> %31, %wide.load23.1
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !372

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa31 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <2 x i64> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx29 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add.i = add i64 %result.09.reg2mem.0, %mul2.i.i
  %add = add i64 %add.i, %36
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !373

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %add.i.i = add i64 %conv.i, %mul2.i.i
  %mul.i13 = mul i64 %add.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm34custom_multiply_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm34custom_multiply_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm34custom_multiply_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm34custom_multiply_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %40
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %45, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Im22custom_divide_variableImEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 1
  %7 = mul i64 %6, 2
  %8 = add i64 %7, -2
  %9 = lshr i64 %8, 1
  %10 = add i64 %9, 1
  %11 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %12 = getelementptr inbounds i64, i64* %first, i64 1
  %13 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm22custom_divide_variableImEEvT_S2_.exit
  %14 = phi i32 [ %48, %_Z26check_shifted_variable_sumIm22custom_divide_variableImEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm22custom_divide_variableImEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.body.preheader.split

vector.body.prol:                                 ; preds = %vector.body.preheader
  %15 = load i64, i64* %first, align 8, !tbaa !11
  %16 = load i64, i64* %12, align 8, !tbaa !11
  %17 = udiv i64 %15, %v1
  %18 = udiv i64 %16, %v1
  br label %vector.body.preheader.split

vector.body.preheader.split:                      ; preds = %vector.body.prol, %vector.body.preheader
  %.lcssa24.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  %.lcssa.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.body.preheader ], [ 2, %vector.body.prol ]
  %vec.phi.unr = phi i64 [ 0, %vector.body.preheader ], [ %17, %vector.body.prol ]
  %vec.phi21.unr = phi i64 [ 0, %vector.body.preheader ], [ %18, %vector.body.prol ]
  br i1 %13, label %middle.block.loopexit, label %vector.body.preheader.split.split

vector.body.preheader.split.split:                ; preds = %vector.body.preheader.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.body.preheader.split.split
  %index = phi i64 [ %index.unr, %vector.body.preheader.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi i64 [ %vec.phi.unr, %vector.body.preheader.split.split ], [ %33, %vector.body ]
  %vec.phi21 = phi i64 [ %vec.phi21.unr, %vector.body.preheader.split.split ], [ %34, %vector.body ]
  %induction2023 = or i64 %index, 1
  %19 = getelementptr inbounds i64, i64* %first, i64 %index
  %20 = getelementptr inbounds i64, i64* %first, i64 %induction2023
  %21 = load i64, i64* %19, align 8, !tbaa !11
  %22 = load i64, i64* %20, align 8, !tbaa !11
  %23 = udiv i64 %21, %v1
  %24 = udiv i64 %22, %v1
  %25 = add i64 %23, %vec.phi
  %26 = add i64 %24, %vec.phi21
  %index.next = add i64 %index, 2
  %induction2023.1 = or i64 %index.next, 1
  %27 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %28 = getelementptr inbounds i64, i64* %first, i64 %induction2023.1
  %29 = load i64, i64* %27, align 8, !tbaa !11
  %30 = load i64, i64* %28, align 8, !tbaa !11
  %31 = udiv i64 %29, %v1
  %32 = udiv i64 %30, %v1
  %33 = add i64 %31, %25
  %34 = add i64 %32, %26
  %index.next.1 = add i64 %index.next, 2
  %35 = icmp eq i64 %index.next.1, %n.vec
  br i1 %35, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !374

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa28 = phi i64 [ %34, %vector.body ]
  %.lcssa27 = phi i64 [ %33, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.body.preheader.split, %middle.block.loopexit.unr-lcssa
  %.lcssa24 = phi i64 [ %.lcssa24.unr, %vector.body.preheader.split ], [ %.lcssa28, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi i64 [ %.lcssa.unr, %vector.body.preheader.split ], [ %.lcssa27, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i64 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i64 [ 0, %overflow.checked ], [ %.lcssa24, %middle.block.loopexit ]
  %bin.rdx = add i64 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %36 = add i64 %resume.val, 1
  %37 = trunc i64 %36 to i32
  %38 = sub i32 %11, %37
  %39 = sub i32 %count, %37
  %xtraiter25 = and i32 %38, 3
  %lcmp.mod26 = icmp ne i32 %xtraiter25, 0
  br i1 %lcmp.mod26, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ %resume.val, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi i64 [ %add.prol, %for.body3.prol ], [ %bin.rdx, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter25, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.prol
  %40 = load i64, i64* %arrayidx.prol, align 8, !tbaa !11
  %div.i.prol = udiv i64 %40, %v1
  %add.prol = add i64 %div.i.prol, %result.09.reg2mem.0.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !375

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi i64 [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi i64 [ 0, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi i64 [ %bin.rdx, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %41 = icmp ult i32 %39, 3
  br i1 %41, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi i64 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %42 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %div.i = udiv i64 %42, %v1
  %add = add i64 %div.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next
  %43 = load i64, i64* %arrayidx.1, align 8, !tbaa !11
  %div.i.1 = udiv i64 %43, %v1
  %add.1 = add i64 %div.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.1
  %44 = load i64, i64* %arrayidx.2, align 8, !tbaa !11
  %div.i.2 = udiv i64 %44, %v1
  %add.2 = add i64 %div.i.2, %add.1
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next.2
  %45 = load i64, i64* %arrayidx.3, align 8, !tbaa !11
  %div.i.3 = udiv i64 %45, %v1
  %add.3 = add i64 %div.i.3, %add.2
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !376

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi i64 [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i64 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %46 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %46 to i64
  %div.i.i = udiv i64 %conv.i, %v1
  %mul.i = mul i64 %div.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm22custom_divide_variableImEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %47 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %47) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm22custom_divide_variableImEEvT_S2_.exit

_Z26check_shifted_variable_sumIm22custom_divide_variableImEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %48 = phi i32 [ %14, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %48
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm22custom_divide_variableImEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %49 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %49
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %50 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %50, null
  %51 = bitcast %struct.one_result* %50 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %52 = load i32, i32* @current_test, align 4, !tbaa !5
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %52, %53
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %54 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %53, %lor.lhs.false.i ]
  %add.i = add nsw i32 %54, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %51, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %55 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %56 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %56) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %57 = phi %struct.one_result* [ %55, %if.then.if.end5_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %58 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %52, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %58 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %57, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %58, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im31custom_divide_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = add i32 %count, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934590
  %cmp.zero = icmp eq i64 %n.vec, 0
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm31custom_divide_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  %5 = phi i32 [ %31, %_Z26check_shifted_variable_sumIm31custom_divide_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm31custom_divide_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.body.preheader

vector.body.preheader:                            ; preds = %overflow.checked
  br label %vector.body

vector.body:                                      ; preds = %vector.body.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi = phi i64 [ %18, %vector.body ], [ 0, %vector.body.preheader ]
  %vec.phi21 = phi i64 [ %19, %vector.body ], [ 0, %vector.body.preheader ]
  %induction2023 = or i64 %index, 1
  %6 = getelementptr inbounds i64, i64* %first, i64 %index
  %7 = getelementptr inbounds i64, i64* %first, i64 %induction2023
  %8 = load i64, i64* %6, align 8, !tbaa !11
  %9 = load i64, i64* %7, align 8, !tbaa !11
  %10 = udiv i64 %8, %v1
  %11 = udiv i64 %9, %v1
  %12 = udiv i64 %10, %v2
  %13 = udiv i64 %11, %v2
  %14 = udiv i64 %12, %v3
  %15 = udiv i64 %13, %v3
  %16 = udiv i64 %14, %v4
  %17 = udiv i64 %15, %v4
  %18 = add i64 %16, %vec.phi
  %19 = add i64 %17, %vec.phi21
  %index.next = add i64 %index, 2
  %20 = icmp eq i64 %index.next, %n.vec
  br i1 %20, label %middle.block.loopexit, label %vector.body, !llvm.loop !377

middle.block.loopexit:                            ; preds = %vector.body
  %.lcssa25 = phi i64 [ %19, %vector.body ]
  %.lcssa = phi i64 [ %18, %vector.body ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi i64 [ 0, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi22 = phi i64 [ 0, %overflow.checked ], [ %.lcssa25, %middle.block.loopexit ]
  %bin.rdx = add i64 %rdx.vec.exit.phi22, %rdx.vec.exit.phi
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  %21 = add i64 %resume.val, 1
  %22 = trunc i64 %21 to i32
  %23 = sub i32 %4, %22
  %24 = sub i32 %count, %22
  %xtraiter = and i32 %23, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %arrayidx.prol = getelementptr inbounds i64, i64* %first, i64 %resume.val
  %25 = load i64, i64* %arrayidx.prol, align 8, !tbaa !11
  %div.i.prol = udiv i64 %25, %v1
  %div1.i.prol = udiv i64 %div.i.prol, %v2
  %div2.i.prol = udiv i64 %div1.i.prol, %v3
  %div3.i.prol = udiv i64 %div2.i.prol, %v4
  %add.prol = add i64 %div3.i.prol, %bin.rdx
  %indvars.iv.next.prol = add nuw nsw i64 %resume.val, 1
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi i64 [ 0, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ %resume.val, %for.body3.preheader ], [ %indvars.iv.next.prol, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi i64 [ %bin.rdx, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %26 = icmp ult i32 %24, 1
  br i1 %26, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi i64 [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %27 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %div.i = udiv i64 %27, %v1
  %div1.i = udiv i64 %div.i, %v2
  %div2.i = udiv i64 %div1.i, %v3
  %div3.i = udiv i64 %div2.i, %v4
  %add = add i64 %div3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds i64, i64* %first, i64 %indvars.iv.next
  %28 = load i64, i64* %arrayidx.1, align 8, !tbaa !11
  %div.i.1 = udiv i64 %28, %v1
  %div1.i.1 = udiv i64 %div.i.1, %v2
  %div2.i.1 = udiv i64 %div1.i.1, %v3
  %div3.i.1 = udiv i64 %div2.i.1, %v4
  %add.1 = add i64 %div3.i.1, %add
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3, !llvm.loop !378

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi i64 [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi i64 [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %bin.rdx, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %29 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %29 to i64
  %div.i.i = udiv i64 %conv.i, %v1
  %div1.i.i = udiv i64 %div.i.i, %v2
  %div2.i.i = udiv i64 %div1.i.i, %v3
  %div3.i.i = udiv i64 %div2.i.i, %v4
  %mul.i = mul i64 %div3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm31custom_divide_multiple_variableImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %30 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %30) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm31custom_divide_multiple_variableImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm31custom_divide_multiple_variableImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %31 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %31
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm31custom_divide_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %32 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %32
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %33 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %33, null
  %34 = bitcast %struct.one_result* %33 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %35 = load i32, i32* @current_test, align 4, !tbaa !5
  %36 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %35, %36
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %37 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %36, %lor.lhs.false.i ]
  %add.i = add nsw i32 %37, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %34, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %38 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %39 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %39) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %40 = phi %struct.one_result* [ %38, %if.then.if.end5_crit_edge.i ], [ %33, %lor.lhs.false.i ]
  %41 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %35, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %41 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %40, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %41, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im32custom_divide_multiple_variable2ImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %div.i.i = udiv i64 %v1, %v2
  %div1.i.i = udiv i64 %div.i.i, %v3
  %div2.i.i = udiv i64 %div1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert24 = insertelement <2 x i64> undef, i64 %div2.i.i, i32 0
  %broadcast.splat25 = shufflevector <2 x i64> %broadcast.splatinsert24, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm32custom_divide_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm32custom_divide_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm32custom_divide_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load23.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %wide.load.prol, %broadcast.splat25
  %17 = add <2 x i64> %wide.load23.prol, %broadcast.splat25
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa30.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi22.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi22 = phi <2 x i64> [ %vec.phi22.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load23 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = add <2 x i64> %wide.load, %vec.phi
  %23 = add <2 x i64> %wide.load23, %vec.phi22
  %24 = add <2 x i64> %22, %broadcast.splat25
  %25 = add <2 x i64> %23, %broadcast.splat25
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load23.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = add <2 x i64> %wide.load.1, %24
  %31 = add <2 x i64> %wide.load23.1, %25
  %32 = add <2 x i64> %30, %broadcast.splat25
  %33 = add <2 x i64> %31, %broadcast.splat25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !379

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa32 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa31 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa30 = phi <2 x i64> [ %.lcssa30.unr, %vector.ph.split ], [ %.lcssa32, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa31, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi28 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa30, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi28, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx29 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx29, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add.i = add i64 %36, %result.09.reg2mem.0
  %add = add i64 %add.i, %div2.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !380

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %add.i.i = add i64 %div2.i.i, %conv.i
  %mul.i = mul i64 %add.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm32custom_divide_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm32custom_divide_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm32custom_divide_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm32custom_divide_multiple_variable2ImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %45, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %42, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %46 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im30custom_mixed_multiple_variableImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = mul i64 %v3, %v2
  %div.i.i = udiv i64 %mul.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert26 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat27 = shufflevector <2 x i64> %broadcast.splatinsert26, <2 x i64> undef, <2 x i32> zeroinitializer
  %broadcast.splatinsert28 = insertelement <2 x i64> undef, i64 %div.i.i, i32 0
  %broadcast.splat29 = shufflevector <2 x i64> %broadcast.splatinsert28, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm30custom_mixed_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %45, %_Z26check_shifted_variable_sumIm30custom_mixed_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm30custom_mixed_multiple_variableImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load25.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = add <2 x i64> %broadcast.splat27, %wide.load.prol
  %17 = add <2 x i64> %broadcast.splat27, %wide.load25.prol
  %18 = sub <2 x i64> %16, %broadcast.splat29
  %19 = sub <2 x i64> %17, %broadcast.splat29
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa34.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %18, %vector.body.prol ]
  %vec.phi24.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %19, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %38, %vector.body ]
  %vec.phi24 = phi <2 x i64> [ %vec.phi24.unr, %vector.ph.split.split ], [ %39, %vector.body ]
  %20 = getelementptr inbounds i64, i64* %first, i64 %index
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = getelementptr i64, i64* %20, i64 2
  %23 = bitcast i64* %22 to <2 x i64>*
  %wide.load25 = load <2 x i64>, <2 x i64>* %23, align 8, !tbaa !11
  %24 = add <2 x i64> %vec.phi, %broadcast.splat27
  %25 = add <2 x i64> %vec.phi24, %broadcast.splat27
  %26 = add <2 x i64> %24, %wide.load
  %27 = add <2 x i64> %25, %wide.load25
  %28 = sub <2 x i64> %26, %broadcast.splat29
  %29 = sub <2 x i64> %27, %broadcast.splat29
  %index.next = add i64 %index, 4
  %30 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %31 = bitcast i64* %30 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %31, align 8, !tbaa !11
  %32 = getelementptr i64, i64* %30, i64 2
  %33 = bitcast i64* %32 to <2 x i64>*
  %wide.load25.1 = load <2 x i64>, <2 x i64>* %33, align 8, !tbaa !11
  %34 = add <2 x i64> %28, %broadcast.splat27
  %35 = add <2 x i64> %29, %broadcast.splat27
  %36 = add <2 x i64> %34, %wide.load.1
  %37 = add <2 x i64> %35, %wide.load25.1
  %38 = sub <2 x i64> %36, %broadcast.splat29
  %39 = sub <2 x i64> %37, %broadcast.splat29
  %index.next.1 = add i64 %index.next, 4
  %40 = icmp eq i64 %index.next.1, %n.vec
  br i1 %40, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !381

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa36 = phi <2 x i64> [ %39, %vector.body ]
  %.lcssa35 = phi <2 x i64> [ %38, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa34 = phi <2 x i64> [ %.lcssa34.unr, %vector.ph.split ], [ %.lcssa36, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa35, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi32 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa34, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi32, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx33 = add <2 x i64> %bin.rdx, %rdx.shuf
  %41 = extractelement <2 x i64> %bin.rdx33, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %41, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %42 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %add.i = add i64 %result.09.reg2mem.0, %v1
  %sub.i = add i64 %add.i, %42
  %add = sub i64 %sub.i, %div.i.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !382

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %41, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %43 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %43 to i64
  %add.i.i = add i64 %conv.i, %v1
  %sub.i.i = sub i64 %add.i.i, %div.i.i
  %mul.i13 = mul i64 %sub.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i13, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm30custom_mixed_multiple_variableImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %44 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %44) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm30custom_mixed_multiple_variableImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm30custom_mixed_multiple_variableImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %45 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %45
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm30custom_mixed_multiple_variableImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %46 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i15 = sub nsw i64 %call.i14, %46
  %conv.i16 = sitofp i64 %sub.i15 to double
  %div.i17 = fdiv double %conv.i16, 1.000000e+06
  %47 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %47, null
  %48 = bitcast %struct.one_result* %47 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end6
  %49 = load i32, i32* @current_test, align 4, !tbaa !5
  %50 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %49, %50
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %51 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %50, %lor.lhs.false.i ]
  %add.i18 = add nsw i32 %51, 10
  store i32 %add.i18, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i18 to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %48, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %52 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %53 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %53) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %54 = phi %struct.one_result* [ %52, %if.then.if.end5_crit_edge.i ], [ %47, %lor.lhs.false.i ]
  %55 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %49, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %55 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 0
  store double %div.i17, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %54, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %55, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Im19custom_variable_andImEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm19custom_variable_andImEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm19custom_variable_andImEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm19custom_variable_andImEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = and <2 x i64> %wide.load.prol, %broadcast.splat23
  %17 = and <2 x i64> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = and <2 x i64> %wide.load, %broadcast.splat23
  %23 = and <2 x i64> %wide.load21, %broadcast.splat23
  %24 = add <2 x i64> %22, %vec.phi
  %25 = add <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = and <2 x i64> %wide.load.1, %broadcast.splat23
  %31 = and <2 x i64> %wide.load21.1, %broadcast.splat23
  %32 = add <2 x i64> %30, %24
  %33 = add <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !383

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %and.i = and i64 %36, %v1
  %add = add i64 %and.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !384

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %and.i.i = and i64 %conv.i, %v1
  %mul.i = mul i64 %and.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm19custom_variable_andImEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm19custom_variable_andImEEvT_S2_.exit

_Z26check_shifted_variable_sumIm19custom_variable_andImEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm19custom_variable_andImEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im28custom_multiple_variable_andImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %and.i.i = and i64 %v2, %v1
  %and1.i.i = and i64 %and.i.i, %v3
  %and2.i.i = and i64 %and1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %and2.i.i, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm28custom_multiple_variable_andImEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm28custom_multiple_variable_andImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm28custom_multiple_variable_andImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = and <2 x i64> %broadcast.splat23, %wide.load.prol
  %17 = and <2 x i64> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = and <2 x i64> %broadcast.splat23, %wide.load
  %23 = and <2 x i64> %broadcast.splat23, %wide.load21
  %24 = add <2 x i64> %22, %vec.phi
  %25 = add <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = and <2 x i64> %broadcast.splat23, %wide.load.1
  %31 = and <2 x i64> %broadcast.splat23, %wide.load21.1
  %32 = add <2 x i64> %30, %24
  %33 = add <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !385

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %and3.i = and i64 %and2.i.i, %36
  %add = add i64 %and3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !386

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %and3.i.i = and i64 %and2.i.i, %conv.i
  %mul.i = mul i64 %and3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm28custom_multiple_variable_andImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm28custom_multiple_variable_andImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm28custom_multiple_variable_andImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm28custom_multiple_variable_andImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Im18custom_variable_orImEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm18custom_variable_orImEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm18custom_variable_orImEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm18custom_variable_orImEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = or <2 x i64> %wide.load.prol, %broadcast.splat23
  %17 = or <2 x i64> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = or <2 x i64> %wide.load, %broadcast.splat23
  %23 = or <2 x i64> %wide.load21, %broadcast.splat23
  %24 = add <2 x i64> %22, %vec.phi
  %25 = add <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = or <2 x i64> %wide.load.1, %broadcast.splat23
  %31 = or <2 x i64> %wide.load21.1, %broadcast.splat23
  %32 = add <2 x i64> %30, %24
  %33 = add <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !387

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %or.i = or i64 %36, %v1
  %add = add i64 %or.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !388

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %or.i.i = or i64 %conv.i, %v1
  %mul.i = mul i64 %or.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm18custom_variable_orImEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm18custom_variable_orImEEvT_S2_.exit

_Z26check_shifted_variable_sumIm18custom_variable_orImEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm18custom_variable_orImEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im27custom_multiple_variable_orImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %or.i.i = or i64 %v2, %v1
  %or1.i.i = or i64 %or.i.i, %v3
  %or2.i.i = or i64 %or1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %or2.i.i, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm27custom_multiple_variable_orImEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm27custom_multiple_variable_orImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm27custom_multiple_variable_orImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = or <2 x i64> %broadcast.splat23, %wide.load.prol
  %17 = or <2 x i64> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = or <2 x i64> %broadcast.splat23, %wide.load
  %23 = or <2 x i64> %broadcast.splat23, %wide.load21
  %24 = add <2 x i64> %22, %vec.phi
  %25 = add <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = or <2 x i64> %broadcast.splat23, %wide.load.1
  %31 = or <2 x i64> %broadcast.splat23, %wide.load21.1
  %32 = add <2 x i64> %30, %24
  %33 = add <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !389

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %or3.i = or i64 %or2.i.i, %36
  %add = add i64 %or3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !390

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %or3.i.i = or i64 %or2.i.i, %conv.i
  %mul.i = mul i64 %or3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm27custom_multiple_variable_orImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm27custom_multiple_variable_orImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm27custom_multiple_variable_orImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm27custom_multiple_variable_orImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Im19custom_variable_xorImEEvPT_iS2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %v1, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm19custom_variable_xorImEEvT_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm19custom_variable_xorImEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm19custom_variable_xorImEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = xor <2 x i64> %wide.load.prol, %broadcast.splat23
  %17 = xor <2 x i64> %wide.load21.prol, %broadcast.splat23
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = xor <2 x i64> %wide.load, %broadcast.splat23
  %23 = xor <2 x i64> %wide.load21, %broadcast.splat23
  %24 = add <2 x i64> %22, %vec.phi
  %25 = add <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = xor <2 x i64> %wide.load.1, %broadcast.splat23
  %31 = xor <2 x i64> %wide.load21.1, %broadcast.splat23
  %32 = add <2 x i64> %30, %24
  %33 = add <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !391

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %xor.i = xor i64 %36, %v1
  %add = add i64 %xor.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !392

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %xor.i.i = xor i64 %conv.i, %v1
  %mul.i = mul i64 %xor.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm19custom_variable_xorImEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm19custom_variable_xorImEEvT_S2_.exit

_Z26check_shifted_variable_sumIm19custom_variable_xorImEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm19custom_variable_xorImEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Im28custom_multiple_variable_xorImEEvPT_iS2_S2_S2_S2_PKc(i64* nocapture readonly %first, i32 %count, i64 %v1, i64 %v2, i64 %v3, i64 %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %xor.i.i = xor i64 %v2, %v1
  %xor1.i.i = xor i64 %xor.i.i, %v3
  %xor2.i.i = xor i64 %xor1.i.i, %v4
  %1 = add i32 %count, -1
  %2 = zext i32 %1 to i64
  %3 = add nuw nsw i64 %2, 1
  %4 = zext i32 %1 to i64
  %5 = add i64 %4, 1
  %6 = lshr i64 %5, 2
  %7 = mul i64 %6, 4
  %8 = add i64 %7, -4
  %9 = lshr i64 %8, 2
  %10 = add i64 %9, 1
  %end.idx = add nuw nsw i64 %2, 1
  %n.vec = and i64 %3, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  %broadcast.splatinsert22 = insertelement <2 x i64> undef, i64 %xor2.i.i, i32 0
  %broadcast.splat23 = shufflevector <2 x i64> %broadcast.splatinsert22, <2 x i64> undef, <2 x i32> zeroinitializer
  %xtraiter = and i64 %10, 1
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %11 = bitcast i64* %first to <2 x i64>*
  %12 = getelementptr i64, i64* %first, i64 2
  %13 = bitcast i64* %12 to <2 x i64>*
  %14 = icmp ult i64 %9, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIm28custom_multiple_variable_xorImEEvT_S2_S2_S2_S2_.exit
  %15 = phi i32 [ %39, %_Z26check_shifted_variable_sumIm28custom_multiple_variable_xorImEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIm28custom_multiple_variable_xorImEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %overflow.checked, label %for.end

overflow.checked:                                 ; preds = %for.cond1.preheader
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %overflow.checked
  br i1 %lcmp.mod, label %vector.body.prol, label %vector.ph.split

vector.body.prol:                                 ; preds = %vector.ph
  %wide.load.prol = load <2 x i64>, <2 x i64>* %11, align 8, !tbaa !11
  %wide.load21.prol = load <2 x i64>, <2 x i64>* %13, align 8, !tbaa !11
  %16 = xor <2 x i64> %broadcast.splat23, %wide.load.prol
  %17 = xor <2 x i64> %broadcast.splat23, %wide.load21.prol
  br label %vector.ph.split

vector.ph.split:                                  ; preds = %vector.body.prol, %vector.ph
  %.lcssa28.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  %.lcssa.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %index.unr = phi i64 [ 0, %vector.ph ], [ 4, %vector.body.prol ]
  %vec.phi.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %16, %vector.body.prol ]
  %vec.phi20.unr = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %17, %vector.body.prol ]
  br i1 %14, label %middle.block.loopexit, label %vector.ph.split.split

vector.ph.split.split:                            ; preds = %vector.ph.split
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.split.split
  %index = phi i64 [ %index.unr, %vector.ph.split.split ], [ %index.next.1, %vector.body ]
  %vec.phi = phi <2 x i64> [ %vec.phi.unr, %vector.ph.split.split ], [ %32, %vector.body ]
  %vec.phi20 = phi <2 x i64> [ %vec.phi20.unr, %vector.ph.split.split ], [ %33, %vector.body ]
  %18 = getelementptr inbounds i64, i64* %first, i64 %index
  %19 = bitcast i64* %18 to <2 x i64>*
  %wide.load = load <2 x i64>, <2 x i64>* %19, align 8, !tbaa !11
  %20 = getelementptr i64, i64* %18, i64 2
  %21 = bitcast i64* %20 to <2 x i64>*
  %wide.load21 = load <2 x i64>, <2 x i64>* %21, align 8, !tbaa !11
  %22 = xor <2 x i64> %broadcast.splat23, %wide.load
  %23 = xor <2 x i64> %broadcast.splat23, %wide.load21
  %24 = add <2 x i64> %22, %vec.phi
  %25 = add <2 x i64> %23, %vec.phi20
  %index.next = add i64 %index, 4
  %26 = getelementptr inbounds i64, i64* %first, i64 %index.next
  %27 = bitcast i64* %26 to <2 x i64>*
  %wide.load.1 = load <2 x i64>, <2 x i64>* %27, align 8, !tbaa !11
  %28 = getelementptr i64, i64* %26, i64 2
  %29 = bitcast i64* %28 to <2 x i64>*
  %wide.load21.1 = load <2 x i64>, <2 x i64>* %29, align 8, !tbaa !11
  %30 = xor <2 x i64> %broadcast.splat23, %wide.load.1
  %31 = xor <2 x i64> %broadcast.splat23, %wide.load21.1
  %32 = add <2 x i64> %30, %24
  %33 = add <2 x i64> %31, %25
  %index.next.1 = add i64 %index.next, 4
  %34 = icmp eq i64 %index.next.1, %n.vec
  br i1 %34, label %middle.block.loopexit.unr-lcssa, label %vector.body, !llvm.loop !393

middle.block.loopexit.unr-lcssa:                  ; preds = %vector.body
  %.lcssa30 = phi <2 x i64> [ %33, %vector.body ]
  %.lcssa29 = phi <2 x i64> [ %32, %vector.body ]
  br label %middle.block.loopexit

middle.block.loopexit:                            ; preds = %vector.ph.split, %middle.block.loopexit.unr-lcssa
  %.lcssa28 = phi <2 x i64> [ %.lcssa28.unr, %vector.ph.split ], [ %.lcssa30, %middle.block.loopexit.unr-lcssa ]
  %.lcssa = phi <2 x i64> [ %.lcssa.unr, %vector.ph.split ], [ %.lcssa29, %middle.block.loopexit.unr-lcssa ]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.loopexit, %overflow.checked
  %resume.val = phi i64 [ 0, %overflow.checked ], [ %n.vec, %middle.block.loopexit ]
  %rdx.vec.exit.phi = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa, %middle.block.loopexit ]
  %rdx.vec.exit.phi26 = phi <2 x i64> [ zeroinitializer, %overflow.checked ], [ %.lcssa28, %middle.block.loopexit ]
  %bin.rdx = add <2 x i64> %rdx.vec.exit.phi26, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
  %bin.rdx27 = add <2 x i64> %bin.rdx, %rdx.shuf
  %35 = extractelement <2 x i64> %bin.rdx27, i32 0
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %for.end, label %for.body3.preheader

for.body3.preheader:                              ; preds = %middle.block
  br label %for.body3

for.body3:                                        ; preds = %for.body3.preheader, %for.body3
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body3 ], [ %resume.val, %for.body3.preheader ]
  %result.09.reg2mem.0 = phi i64 [ %add, %for.body3 ], [ %35, %for.body3.preheader ]
  %arrayidx = getelementptr inbounds i64, i64* %first, i64 %indvars.iv
  %36 = load i64, i64* %arrayidx, align 8, !tbaa !11
  %xor3.i = xor i64 %xor2.i.i, %36
  %add = add i64 %xor3.i, %result.09.reg2mem.0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %count
  br i1 %exitcond, label %for.end.loopexit, label %for.body3, !llvm.loop !394

for.end.loopexit:                                 ; preds = %for.body3
  %add.lcssa = phi i64 [ %add, %for.body3 ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %middle.block, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi i64 [ 0, %for.cond1.preheader ], [ %35, %middle.block ], [ %add.lcssa, %for.end.loopexit ]
  %37 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptoui double %37 to i64
  %xor3.i.i = xor i64 %xor2.i.i, %conv.i
  %mul.i = mul i64 %xor3.i.i, 8000
  %cmp.i.i = icmp eq i64 %mul.i, %result.0.lcssa.reg2mem.0
  br i1 %cmp.i.i, label %_Z26check_shifted_variable_sumIm28custom_multiple_variable_xorImEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %38 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %38) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIm28custom_multiple_variable_xorImEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIm28custom_multiple_variable_xorImEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %39 = phi i32 [ %15, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %39
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIm28custom_multiple_variable_xorImEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %40 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %40
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %41 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %41, null
  %42 = bitcast %struct.one_result* %41 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %43 = load i32, i32* @current_test, align 4, !tbaa !5
  %44 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %43, %44
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %45 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %44, %lor.lhs.false.i ]
  %add.i = add nsw i32 %45, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %42, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %46 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %47 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %47) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %48 = phi %struct.one_result* [ %46, %if.then.if.end5_crit_edge.i ], [ %41, %lor.lhs.false.i ]
  %49 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %43, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %49 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %48, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %49, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1If19custom_add_variableIfEEvPT_iS2_PKc(float* nocapture readonly %first, i32 %count, float %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit
  %3 = phi i32 [ %13, %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi float [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds float, float* %first, i64 %indvars.iv.prol
  %4 = load float, float* %arrayidx.prol, align 4, !tbaa !24
  %add.i.prol = fadd float %4, %v1
  %add.prol = fadd float %result.09.reg2mem.0.prol, %add.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !395

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi float [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %add.i = fadd float %5, %v1
  %add = fadd float %result.09.reg2mem.0, %add.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %add.i.1 = fadd float %6, %v1
  %add.1 = fadd float %add, %add.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.1
  %7 = load float, float* %arrayidx.2, align 4, !tbaa !24
  %add.i.2 = fadd float %7, %v1
  %add.2 = fadd float %add.1, %add.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.2
  %8 = load float, float* %arrayidx.3, align 4, !tbaa !24
  %add.i.3 = fadd float %8, %v1
  %add.3 = fadd float %add.2, %add.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi float [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %9 to float
  %add.i.i = fadd float %conv.i, %v1
  %mul.i = fmul float %add.i.i, 8.000000e+03
  %sub.i.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %10 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %10, 1.000000e-04
  %div.i.i = fdiv float %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i.i, float %sub.i.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %11 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %11, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %12 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %12) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit

_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %13 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %13
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %14 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %14
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %15 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %15, null
  %16 = bitcast %struct.one_result* %15 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %17 = load i32, i32* @current_test, align 4, !tbaa !5
  %18 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %17, %18
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %19 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %18, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %19, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %16, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %20 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %21 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %21) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %22 = phi %struct.one_result* [ %20, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %23 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %17, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %23 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %23, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1If19custom_add_variableIfEEvPT_iS2_PKc(float* nocapture readonly %first, i32 %count, float %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end7

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %conv = sitofp i32 %count to float
  %mul = fmul float %conv, %v1
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = add i64 %2, -1
  %xtraiter = and i64 %2, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %4 = icmp ult i64 %3, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit
  %5 = phi i32 [ %10, %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc6, %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %polly.stmt.for.inc.preheader, label %for.end

polly.stmt.for.inc.preheader:                     ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %polly.stmt.for.inc.prol.preheader, label %polly.stmt.for.inc.preheader.split

polly.stmt.for.inc.prol.preheader:                ; preds = %polly.stmt.for.inc.preheader
  br label %polly.stmt.for.inc.prol

polly.stmt.for.inc.prol:                          ; preds = %polly.stmt.for.inc.prol.preheader, %polly.stmt.for.inc.prol
  %result.09.reg2mem.0.prol = phi float [ %p_add.prol, %polly.stmt.for.inc.prol ], [ 0.000000e+00, %polly.stmt.for.inc.prol.preheader ]
  %polly.indvar.prol = phi i64 [ %polly.indvar_next.prol, %polly.stmt.for.inc.prol ], [ 0, %polly.stmt.for.inc.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %polly.stmt.for.inc.prol ], [ %xtraiter, %polly.stmt.for.inc.prol.preheader ]
  %scevgep.prol = getelementptr float, float* %first, i64 %polly.indvar.prol
  %_p_scalar_.prol = load float, float* %scevgep.prol, align 4, !alias.scope !396, !noalias !398
  %p_add.prol = fadd float %result.09.reg2mem.0.prol, %_p_scalar_.prol
  %polly.indvar_next.prol = add nuw nsw i64 %polly.indvar.prol, 1
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %polly.stmt.for.inc.prol, label %polly.stmt.for.inc.preheader.split.loopexit, !llvm.loop !403

polly.stmt.for.inc.preheader.split.loopexit:      ; preds = %polly.stmt.for.inc.prol
  %polly.indvar_next.prol.lcssa = phi i64 [ %polly.indvar_next.prol, %polly.stmt.for.inc.prol ]
  %p_add.prol.lcssa = phi float [ %p_add.prol, %polly.stmt.for.inc.prol ]
  br label %polly.stmt.for.inc.preheader.split

polly.stmt.for.inc.preheader.split:               ; preds = %polly.stmt.for.inc.preheader.split.loopexit, %polly.stmt.for.inc.preheader
  %p_add.lcssa.unr = phi float [ 0.000000e+00, %polly.stmt.for.inc.preheader ], [ %p_add.prol.lcssa, %polly.stmt.for.inc.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %polly.stmt.for.inc.preheader ], [ %p_add.prol.lcssa, %polly.stmt.for.inc.preheader.split.loopexit ]
  %polly.indvar.unr = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %polly.indvar_next.prol.lcssa, %polly.stmt.for.inc.preheader.split.loopexit ]
  br i1 %4, label %for.end.loopexit, label %polly.stmt.for.inc.preheader.split.split

polly.stmt.for.inc.preheader.split.split:         ; preds = %polly.stmt.for.inc.preheader.split
  br label %polly.stmt.for.inc

for.end.loopexit.unr-lcssa:                       ; preds = %polly.stmt.for.inc
  %p_add.3.lcssa = phi float [ %p_add.3, %polly.stmt.for.inc ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %polly.stmt.for.inc.preheader.split, %for.end.loopexit.unr-lcssa
  %p_add.lcssa = phi float [ %p_add.lcssa.unr, %polly.stmt.for.inc.preheader.split ], [ %p_add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %p_add.lcssa, %for.end.loopexit ]
  %add4 = fadd float %mul, %result.0.lcssa.reg2mem.0
  %6 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %6 to float
  %add.i.i = fadd float %conv.i, %v1
  %mul.i = fmul float %add.i.i, 8.000000e+03
  %sub.i.i = fsub float %add4, %mul.i
  %fabsf.i.i = tail call float @fabsf(float %add4) #4
  %7 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %7, 1.000000e-04
  %div.i.i = fdiv float %sub.i.i, %add4
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i.i, float %sub.i.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %8 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %8, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %9 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %9) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit

_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %10 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i ]
  %inc6 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc6, %10
  br i1 %cmp, label %for.cond1.preheader, label %for.end7.loopexit

for.end7.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf19custom_add_variableIfEEvT_S2_.exit
  br label %for.end7

for.end7:                                         ; preds = %for.end7.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %11 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %11
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %12 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %12, null
  %13 = bitcast %struct.one_result* %12 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end7
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end7
  %14 = load i32, i32* @current_test, align 4, !tbaa !5
  %15 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %14, %15
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %16 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %add.i = add nsw i32 %16, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %13, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %17 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %18 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %18) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %19 = phi %struct.one_result* [ %17, %if.then.if.end5_crit_edge.i ], [ %12, %lor.lhs.false.i ]
  %20 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %14, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %20 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %19, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %19, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %20, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void

polly.stmt.for.inc:                               ; preds = %polly.stmt.for.inc, %polly.stmt.for.inc.preheader.split.split
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %polly.stmt.for.inc.preheader.split.split ], [ %p_add.3, %polly.stmt.for.inc ]
  %polly.indvar = phi i64 [ %polly.indvar.unr, %polly.stmt.for.inc.preheader.split.split ], [ %polly.indvar_next.3, %polly.stmt.for.inc ]
  %scevgep = getelementptr float, float* %first, i64 %polly.indvar
  %_p_scalar_ = load float, float* %scevgep, align 4, !alias.scope !396, !noalias !398
  %p_add = fadd float %result.09.reg2mem.0, %_p_scalar_
  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
  %scevgep.1 = getelementptr float, float* %first, i64 %polly.indvar_next
  %_p_scalar_.1 = load float, float* %scevgep.1, align 4, !alias.scope !396, !noalias !398
  %p_add.1 = fadd float %p_add, %_p_scalar_.1
  %polly.indvar_next.1 = add nuw nsw i64 %polly.indvar_next, 1
  %scevgep.2 = getelementptr float, float* %first, i64 %polly.indvar_next.1
  %_p_scalar_.2 = load float, float* %scevgep.2, align 4, !alias.scope !396, !noalias !398
  %p_add.2 = fadd float %p_add.1, %_p_scalar_.2
  %polly.indvar_next.2 = add nuw nsw i64 %polly.indvar_next.1, 1
  %scevgep.3 = getelementptr float, float* %first, i64 %polly.indvar_next.2
  %_p_scalar_.3 = load float, float* %scevgep.3, align 4, !alias.scope !396, !noalias !398
  %p_add.3 = fadd float %p_add.2, %_p_scalar_.3
  %polly.indvar_next.3 = add nuw nsw i64 %polly.indvar_next.2, 1
  %exitcond.3 = icmp eq i64 %polly.indvar_next.3, %1
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %polly.stmt.for.inc
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4If28custom_add_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* nocapture readonly %first, i32 %count, float %v1, float %v2, float %v3, float %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf28custom_add_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumIf28custom_add_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf28custom_add_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %4 = load float, float* %first, align 4, !tbaa !24
  %add.i.prol = fadd float %4, %v1
  %add1.i.prol = fadd float %add.i.prol, %v2
  %add2.i.prol = fadd float %add1.i.prol, %v3
  %add3.i.prol = fadd float %add2.i.prol, %v4
  %add.prol = fadd float 0.000000e+00, %add3.i.prol
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ 1, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %add.i = fadd float %5, %v1
  %add1.i = fadd float %add.i, %v2
  %add2.i = fadd float %add1.i, %v3
  %add3.i = fadd float %add2.i, %v4
  %add = fadd float %result.09.reg2mem.0, %add3.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %add.i.1 = fadd float %6, %v1
  %add1.i.1 = fadd float %add.i.1, %v2
  %add2.i.1 = fadd float %add1.i.1, %v3
  %add3.i.1 = fadd float %add2.i.1, %v4
  %add.1 = fadd float %add, %add3.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi float [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %7 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %7 to float
  %add.i.i = fadd float %conv.i, %v1
  %add1.i.i = fadd float %add.i.i, %v2
  %add2.i.i = fadd float %add1.i.i, %v3
  %add3.i.i = fadd float %add2.i.i, %v4
  %mul.i = fmul float %add3.i.i, 8.000000e+03
  %sub.i.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %8 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %8, 1.000000e-04
  %div.i.i = fdiv float %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i.i, float %sub.i.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %9 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %9, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf28custom_add_multiple_variableIfEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf28custom_add_multiple_variableIfEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIf28custom_add_multiple_variableIfEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf28custom_add_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %12
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i14, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %17, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %14, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %18 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1If19custom_sub_variableIfEEvPT_iS2_PKc(float* nocapture readonly %first, i32 %count, float %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf19custom_sub_variableIfEEvT_S2_.exit
  %3 = phi i32 [ %13, %_Z26check_shifted_variable_sumIf19custom_sub_variableIfEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf19custom_sub_variableIfEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi float [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds float, float* %first, i64 %indvars.iv.prol
  %4 = load float, float* %arrayidx.prol, align 4, !tbaa !24
  %sub.i.prol = fsub float %4, %v1
  %add.prol = fadd float %result.09.reg2mem.0.prol, %sub.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !404

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi float [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %sub.i = fsub float %5, %v1
  %add = fadd float %result.09.reg2mem.0, %sub.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %sub.i.1 = fsub float %6, %v1
  %add.1 = fadd float %add, %sub.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.1
  %7 = load float, float* %arrayidx.2, align 4, !tbaa !24
  %sub.i.2 = fsub float %7, %v1
  %add.2 = fadd float %add.1, %sub.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.2
  %8 = load float, float* %arrayidx.3, align 4, !tbaa !24
  %sub.i.3 = fsub float %8, %v1
  %add.3 = fadd float %add.2, %sub.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi float [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %9 to float
  %sub.i.i = fsub float %conv.i, %v1
  %mul.i = fmul float %sub.i.i, 8.000000e+03
  %sub.i3.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %10 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %10, 1.000000e-04
  %div.i.i = fdiv float %sub.i3.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i.i, float %sub.i3.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %11 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %11, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf19custom_sub_variableIfEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %12 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %12) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf19custom_sub_variableIfEEvT_S2_.exit

_Z26check_shifted_variable_sumIf19custom_sub_variableIfEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %13 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %13
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf19custom_sub_variableIfEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %14 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %14
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %15 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %15, null
  %16 = bitcast %struct.one_result* %15 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %17 = load i32, i32* @current_test, align 4, !tbaa !5
  %18 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %17, %18
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %19 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %18, %lor.lhs.false.i ]
  %add.i = add nsw i32 %19, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %16, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %20 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %21 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %21) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %22 = phi %struct.one_result* [ %20, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %23 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %17, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %23 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %23, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4If28custom_sub_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* nocapture readonly %first, i32 %count, float %v1, float %v2, float %v3, float %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf28custom_sub_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumIf28custom_sub_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf28custom_sub_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %4 = load float, float* %first, align 4, !tbaa !24
  %sub.i.prol = fsub float %4, %v1
  %sub1.i.prol = fsub float %sub.i.prol, %v2
  %sub2.i.prol = fsub float %sub1.i.prol, %v3
  %sub3.i.prol = fsub float %sub2.i.prol, %v4
  %add.prol = fadd float 0.000000e+00, %sub3.i.prol
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ 1, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %sub.i = fsub float %5, %v1
  %sub1.i = fsub float %sub.i, %v2
  %sub2.i = fsub float %sub1.i, %v3
  %sub3.i = fsub float %sub2.i, %v4
  %add = fadd float %result.09.reg2mem.0, %sub3.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %sub.i.1 = fsub float %6, %v1
  %sub1.i.1 = fsub float %sub.i.1, %v2
  %sub2.i.1 = fsub float %sub1.i.1, %v3
  %sub3.i.1 = fsub float %sub2.i.1, %v4
  %add.1 = fadd float %add, %sub3.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi float [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %7 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %7 to float
  %sub.i.i = fsub float %conv.i, %v1
  %sub1.i.i = fsub float %sub.i.i, %v2
  %sub2.i.i = fsub float %sub1.i.i, %v3
  %sub3.i.i = fsub float %sub2.i.i, %v4
  %mul.i = fmul float %sub3.i.i, 8.000000e+03
  %sub.i3.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %8 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %8, 1.000000e-04
  %div.i.i = fdiv float %sub.i3.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i.i, float %sub.i3.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %9 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %9, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf28custom_sub_multiple_variableIfEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf28custom_sub_multiple_variableIfEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIf28custom_sub_multiple_variableIfEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf28custom_sub_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %12
  %conv.i15 = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i = add nsw i32 %17, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %14, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %18 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1If24custom_multiply_variableIfEEvPT_iS2_PKc(float* nocapture readonly %first, i32 %count, float %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf24custom_multiply_variableIfEEvT_S2_.exit
  %3 = phi i32 [ %13, %_Z26check_shifted_variable_sumIf24custom_multiply_variableIfEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf24custom_multiply_variableIfEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi float [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds float, float* %first, i64 %indvars.iv.prol
  %4 = load float, float* %arrayidx.prol, align 4, !tbaa !24
  %mul.i.prol = fmul float %4, %v1
  %add.prol = fadd float %result.09.reg2mem.0.prol, %mul.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !405

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi float [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %mul.i = fmul float %5, %v1
  %add = fadd float %result.09.reg2mem.0, %mul.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %mul.i.1 = fmul float %6, %v1
  %add.1 = fadd float %add, %mul.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.1
  %7 = load float, float* %arrayidx.2, align 4, !tbaa !24
  %mul.i.2 = fmul float %7, %v1
  %add.2 = fadd float %add.1, %mul.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.2
  %8 = load float, float* %arrayidx.3, align 4, !tbaa !24
  %mul.i.3 = fmul float %8, %v1
  %add.3 = fadd float %add.2, %mul.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi float [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %9 to float
  %mul.i.i = fmul float %conv.i, %v1
  %mul.i13 = fmul float %mul.i.i, 8.000000e+03
  %sub.i.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i13
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %10 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %10, 1.000000e-04
  %div.i.i = fdiv float %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i.i, float %sub.i.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %11 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %11, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf24custom_multiply_variableIfEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %12 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %12) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf24custom_multiply_variableIfEEvT_S2_.exit

_Z26check_shifted_variable_sumIf24custom_multiply_variableIfEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %13 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %13
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf24custom_multiply_variableIfEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %14 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %14
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %15 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %15, null
  %16 = bitcast %struct.one_result* %15 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %17 = load i32, i32* @current_test, align 4, !tbaa !5
  %18 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %17, %18
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %19 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %18, %lor.lhs.false.i ]
  %add.i = add nsw i32 %19, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %16, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %20 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %21 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %21) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %22 = phi %struct.one_result* [ %20, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %23 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %17, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %23 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %23, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4If33custom_multiply_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* nocapture readonly %first, i32 %count, float %v1, float %v2, float %v3, float %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf33custom_multiply_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumIf33custom_multiply_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf33custom_multiply_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %4 = load float, float* %first, align 4, !tbaa !24
  %mul.i.prol = fmul float %4, %v1
  %mul1.i.prol = fmul float %mul.i.prol, %v2
  %mul2.i.prol = fmul float %mul1.i.prol, %v3
  %mul3.i.prol = fmul float %mul2.i.prol, %v4
  %add.prol = fadd float 0.000000e+00, %mul3.i.prol
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ 1, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %mul.i = fmul float %5, %v1
  %mul1.i = fmul float %mul.i, %v2
  %mul2.i = fmul float %mul1.i, %v3
  %mul3.i = fmul float %mul2.i, %v4
  %add = fadd float %result.09.reg2mem.0, %mul3.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %mul.i.1 = fmul float %6, %v1
  %mul1.i.1 = fmul float %mul.i.1, %v2
  %mul2.i.1 = fmul float %mul1.i.1, %v3
  %mul3.i.1 = fmul float %mul2.i.1, %v4
  %add.1 = fadd float %add, %mul3.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi float [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %7 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %7 to float
  %mul.i.i = fmul float %conv.i, %v1
  %mul1.i.i = fmul float %mul.i.i, %v2
  %mul2.i.i = fmul float %mul1.i.i, %v3
  %mul3.i.i = fmul float %mul2.i.i, %v4
  %mul.i13 = fmul float %mul3.i.i, 8.000000e+03
  %sub.i.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i13
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %8 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %8, 1.000000e-04
  %div.i.i = fdiv float %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i.i, float %sub.i.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %9 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %9, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf33custom_multiply_multiple_variableIfEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf33custom_multiply_multiple_variableIfEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIf33custom_multiply_multiple_variableIfEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf33custom_multiply_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %12
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i = add nsw i32 %17, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %14, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %18 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4If34custom_multiply_multiple_variable2IfEEvPT_iS2_S2_S2_S2_PKc(float* nocapture readonly %first, i32 %count, float %v1, float %v2, float %v3, float %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = fmul float %v1, %v2
  %mul1.i.i = fmul float %mul.i.i, %v3
  %mul2.i.i = fmul float %mul1.i.i, %v4
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf34custom_multiply_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %13, %_Z26check_shifted_variable_sumIf34custom_multiply_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf34custom_multiply_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi float [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds float, float* %first, i64 %indvars.iv.prol
  %4 = load float, float* %arrayidx.prol, align 4, !tbaa !24
  %add.i.prol = fadd float %mul2.i.i, %4
  %add.prol = fadd float %result.09.reg2mem.0.prol, %add.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !406

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi float [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %add.i = fadd float %mul2.i.i, %5
  %add = fadd float %result.09.reg2mem.0, %add.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %add.i.1 = fadd float %mul2.i.i, %6
  %add.1 = fadd float %add, %add.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.1
  %7 = load float, float* %arrayidx.2, align 4, !tbaa !24
  %add.i.2 = fadd float %mul2.i.i, %7
  %add.2 = fadd float %add.1, %add.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.2
  %8 = load float, float* %arrayidx.3, align 4, !tbaa !24
  %add.i.3 = fadd float %mul2.i.i, %8
  %add.3 = fadd float %add.2, %add.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi float [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %9 to float
  %add.i.i = fadd float %mul2.i.i, %conv.i
  %mul.i13 = fmul float %add.i.i, 8.000000e+03
  %sub.i.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i13
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %10 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %10, 1.000000e-04
  %div.i.i = fdiv float %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i.i, float %sub.i.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %11 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %11, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf34custom_multiply_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %12 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %12) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf34custom_multiply_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIf34custom_multiply_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %13 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %13
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf34custom_multiply_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %14 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %14
  %conv.i15 = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i15, 1.000000e+06
  %15 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %15, null
  %16 = bitcast %struct.one_result* %15 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %17 = load i32, i32* @current_test, align 4, !tbaa !5
  %18 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %17, %18
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %19 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %18, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %19, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %16, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %20 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %21 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %21) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %22 = phi %struct.one_result* [ %20, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %23 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %17, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %23 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %23, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1If22custom_divide_variableIfEEvPT_iS2_PKc(float* nocapture readonly %first, i32 %count, float %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf22custom_divide_variableIfEEvT_S2_.exit
  %3 = phi i32 [ %13, %_Z26check_shifted_variable_sumIf22custom_divide_variableIfEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf22custom_divide_variableIfEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi float [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds float, float* %first, i64 %indvars.iv.prol
  %4 = load float, float* %arrayidx.prol, align 4, !tbaa !24
  %div.i.prol = fdiv float %4, %v1
  %add.prol = fadd float %result.09.reg2mem.0.prol, %div.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !407

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi float [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %div.i = fdiv float %5, %v1
  %add = fadd float %result.09.reg2mem.0, %div.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %div.i.1 = fdiv float %6, %v1
  %add.1 = fadd float %add, %div.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.1
  %7 = load float, float* %arrayidx.2, align 4, !tbaa !24
  %div.i.2 = fdiv float %7, %v1
  %add.2 = fadd float %add.1, %div.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.2
  %8 = load float, float* %arrayidx.3, align 4, !tbaa !24
  %div.i.3 = fdiv float %8, %v1
  %add.3 = fadd float %add.2, %div.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi float [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %9 to float
  %div.i.i = fdiv float %conv.i, %v1
  %mul.i = fmul float %div.i.i, 8.000000e+03
  %sub.i.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %10 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %10, 1.000000e-04
  %div.i3.i = fdiv float %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i3.i, float %sub.i.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %11 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %11, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf22custom_divide_variableIfEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %12 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %12) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf22custom_divide_variableIfEEvT_S2_.exit

_Z26check_shifted_variable_sumIf22custom_divide_variableIfEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %13 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %13
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf22custom_divide_variableIfEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %14 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %14
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %15 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %15, null
  %16 = bitcast %struct.one_result* %15 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %17 = load i32, i32* @current_test, align 4, !tbaa !5
  %18 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %17, %18
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %19 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %18, %lor.lhs.false.i ]
  %add.i = add nsw i32 %19, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %16, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %20 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %21 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %21) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %22 = phi %struct.one_result* [ %20, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %23 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %17, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %23 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %23, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4If31custom_divide_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* nocapture readonly %first, i32 %count, float %v1, float %v2, float %v3, float %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf31custom_divide_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumIf31custom_divide_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf31custom_divide_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %4 = load float, float* %first, align 4, !tbaa !24
  %div.i.prol = fdiv float %4, %v1
  %div1.i.prol = fdiv float %div.i.prol, %v2
  %div2.i.prol = fdiv float %div1.i.prol, %v3
  %div3.i.prol = fdiv float %div2.i.prol, %v4
  %add.prol = fadd float 0.000000e+00, %div3.i.prol
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ 1, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %div.i = fdiv float %5, %v1
  %div1.i = fdiv float %div.i, %v2
  %div2.i = fdiv float %div1.i, %v3
  %div3.i = fdiv float %div2.i, %v4
  %add = fadd float %result.09.reg2mem.0, %div3.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %div.i.1 = fdiv float %6, %v1
  %div1.i.1 = fdiv float %div.i.1, %v2
  %div2.i.1 = fdiv float %div1.i.1, %v3
  %div3.i.1 = fdiv float %div2.i.1, %v4
  %add.1 = fadd float %add, %div3.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi float [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %7 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %7 to float
  %div.i.i = fdiv float %conv.i, %v1
  %div1.i.i = fdiv float %div.i.i, %v2
  %div2.i.i = fdiv float %div1.i.i, %v3
  %div3.i.i = fdiv float %div2.i.i, %v4
  %mul.i = fmul float %div3.i.i, 8.000000e+03
  %sub.i.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %8 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %8, 1.000000e-04
  %div.i3.i = fdiv float %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i3.i, float %sub.i.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %9 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %9, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf31custom_divide_multiple_variableIfEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf31custom_divide_multiple_variableIfEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIf31custom_divide_multiple_variableIfEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf31custom_divide_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %12
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i = add nsw i32 %17, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %14, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %18 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4If32custom_divide_multiple_variable2IfEEvPT_iS2_S2_S2_S2_PKc(float* nocapture readonly %first, i32 %count, float %v1, float %v2, float %v3, float %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %div.i.i = fdiv float %v1, %v2
  %div1.i.i = fdiv float %div.i.i, %v3
  %div2.i.i = fdiv float %div1.i.i, %v4
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf32custom_divide_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %13, %_Z26check_shifted_variable_sumIf32custom_divide_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf32custom_divide_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi float [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds float, float* %first, i64 %indvars.iv.prol
  %4 = load float, float* %arrayidx.prol, align 4, !tbaa !24
  %add.i.prol = fadd float %4, %div2.i.i
  %add.prol = fadd float %result.09.reg2mem.0.prol, %add.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !408

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi float [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %add.i = fadd float %5, %div2.i.i
  %add = fadd float %result.09.reg2mem.0, %add.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %add.i.1 = fadd float %6, %div2.i.i
  %add.1 = fadd float %add, %add.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.1
  %7 = load float, float* %arrayidx.2, align 4, !tbaa !24
  %add.i.2 = fadd float %7, %div2.i.i
  %add.2 = fadd float %add.1, %add.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.2
  %8 = load float, float* %arrayidx.3, align 4, !tbaa !24
  %add.i.3 = fadd float %8, %div2.i.i
  %add.3 = fadd float %add.2, %add.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi float [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %9 to float
  %add.i.i = fadd float %conv.i, %div2.i.i
  %mul.i = fmul float %add.i.i, 8.000000e+03
  %sub.i.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %10 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %10, 1.000000e-04
  %div.i3.i = fdiv float %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i3.i, float %sub.i.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %11 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %11, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf32custom_divide_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %12 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %12) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf32custom_divide_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIf32custom_divide_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %13 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %13
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf32custom_divide_multiple_variable2IfEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %14 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %14
  %conv.i14 = sitofp i64 %sub.i to double
  %div.i15 = fdiv double %conv.i14, 1.000000e+06
  %15 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %15, null
  %16 = bitcast %struct.one_result* %15 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i20

lor.lhs.false.i:                                  ; preds = %for.end6
  %17 = load i32, i32* @current_test, align 4, !tbaa !5
  %18 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %17, %18
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i20

if.then.i20:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %19 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %18, %lor.lhs.false.i ]
  %add.i16 = add nsw i32 %19, 10
  store i32 %add.i16, i32* @allocated_results, align 4, !tbaa !5
  %conv.i17 = sext i32 %add.i16 to i64
  %mul.i18 = shl nsw i64 %conv.i17, 4
  %call.i19 = tail call i8* @realloc(i8* %16, i64 %mul.i18) #5
  store i8* %call.i19, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i19, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i20
  %20 = bitcast i8* %call.i19 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i20
  %21 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %21) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %22 = phi %struct.one_result* [ %20, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %23 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %17, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %23 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 0
  store double %div.i15, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %23, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4If30custom_mixed_multiple_variableIfEEvPT_iS2_S2_S2_S2_PKc(float* nocapture readonly %first, i32 %count, float %v1, float %v2, float %v3, float %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = fmul float %v2, %v3
  %div.i.i = fdiv float %mul.i.i, %v4
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumIf30custom_mixed_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %13, %_Z26check_shifted_variable_sumIf30custom_mixed_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumIf30custom_mixed_multiple_variableIfEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi float [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds float, float* %first, i64 %indvars.iv.prol
  %4 = load float, float* %arrayidx.prol, align 4, !tbaa !24
  %add.i.prol = fadd float %4, %v1
  %sub.i.prol = fsub float %add.i.prol, %div.i.i
  %add.prol = fadd float %result.09.reg2mem.0.prol, %sub.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !409

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi float [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi float [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi float [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds float, float* %first, i64 %indvars.iv
  %5 = load float, float* %arrayidx, align 4, !tbaa !24
  %add.i = fadd float %5, %v1
  %sub.i = fsub float %add.i, %div.i.i
  %add = fadd float %result.09.reg2mem.0, %sub.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next
  %6 = load float, float* %arrayidx.1, align 4, !tbaa !24
  %add.i.1 = fadd float %6, %v1
  %sub.i.1 = fsub float %add.i.1, %div.i.i
  %add.1 = fadd float %add, %sub.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.1
  %7 = load float, float* %arrayidx.2, align 4, !tbaa !24
  %add.i.2 = fadd float %7, %v1
  %sub.i.2 = fsub float %add.i.2, %div.i.i
  %add.2 = fadd float %add.1, %sub.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds float, float* %first, i64 %indvars.iv.next.2
  %8 = load float, float* %arrayidx.3, align 4, !tbaa !24
  %add.i.3 = fadd float %8, %v1
  %sub.i.3 = fsub float %add.i.3, %div.i.i
  %add.3 = fadd float %add.2, %sub.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi float [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi float [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi float [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %conv.i = fptrunc double %9 to float
  %add.i.i = fadd float %conv.i, %v1
  %sub.i.i = fsub float %add.i.i, %div.i.i
  %mul.i13 = fmul float %sub.i.i, 8.000000e+03
  %sub.i3.i = fsub float %result.0.lcssa.reg2mem.0, %mul.i13
  %fabsf.i.i = tail call float @fabsf(float %result.0.lcssa.reg2mem.0) #4
  %10 = fpext float %fabsf.i.i to double
  %cmp.i.i = fcmp ogt double %10, 1.000000e-04
  %div.i4.i = fdiv float %sub.i3.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.in.i.i = select i1 %cmp.i.i, float %div.i4.i, float %sub.i3.i
  %fabsf5.i.i = tail call float @fabsf(float %reldiff.0.in.i.i) #4
  %11 = fpext float %fabsf5.i.i to double
  %cmp4.i.i = fcmp olt double %11, 1.000000e-03
  br i1 %cmp4.i.i, label %_Z26check_shifted_variable_sumIf30custom_mixed_multiple_variableIfEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %12 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %12) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumIf30custom_mixed_multiple_variableIfEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumIf30custom_mixed_multiple_variableIfEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %13 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %13
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumIf30custom_mixed_multiple_variableIfEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %14 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i15 = sub nsw i64 %call.i14, %14
  %conv.i16 = sitofp i64 %sub.i15 to double
  %div.i17 = fdiv double %conv.i16, 1.000000e+06
  %15 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %15, null
  %16 = bitcast %struct.one_result* %15 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i22

lor.lhs.false.i:                                  ; preds = %for.end6
  %17 = load i32, i32* @current_test, align 4, !tbaa !5
  %18 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %17, %18
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i22

if.then.i22:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %19 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %18, %lor.lhs.false.i ]
  %add.i18 = add nsw i32 %19, 10
  store i32 %add.i18, i32* @allocated_results, align 4, !tbaa !5
  %conv.i19 = sext i32 %add.i18 to i64
  %mul.i20 = shl nsw i64 %conv.i19, 4
  %call.i21 = tail call i8* @realloc(i8* %16, i64 %mul.i20) #5
  store i8* %call.i21, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i21, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i22
  %20 = bitcast i8* %call.i21 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i22
  %21 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %21) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %22 = phi %struct.one_result* [ %20, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %23 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %17, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %23 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 0
  store double %div.i17, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %22, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %23, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Id19custom_add_variableIdEEvPT_iS2_PKc(double* nocapture readonly %first, i32 %count, double %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi double [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds double, double* %first, i64 %indvars.iv.prol
  %4 = load double, double* %arrayidx.prol, align 8, !tbaa !13
  %add.i.prol = fadd double %4, %v1
  %add.prol = fadd double %result.09.reg2mem.0.prol, %add.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !410

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi double [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %add.i = fadd double %5, %v1
  %add = fadd double %result.09.reg2mem.0, %add.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %add.i.1 = fadd double %6, %v1
  %add.1 = fadd double %add, %add.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.1
  %7 = load double, double* %arrayidx.2, align 8, !tbaa !13
  %add.i.2 = fadd double %7, %v1
  %add.2 = fadd double %add.1, %add.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.2
  %8 = load double, double* %arrayidx.3, align 8, !tbaa !13
  %add.i.3 = fadd double %8, %v1
  %add.3 = fadd double %add.2, %add.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi double [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %add.i.i = fadd double %9, %v1
  %mul.i = fmul double %add.i.i, 8.000000e+03
  %sub.i.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i.i = fdiv double %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i.i, double %sub.i.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit

_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %12
  %conv.i = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i14 = add nsw i32 %17, 10
  store i32 %add.i14, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i14 to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %14, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %18 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z22test_hoisted_variable1Id19custom_add_variableIdEEvPT_iS2_PKc(double* nocapture readonly %first, i32 %count, double %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end7

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %conv = sitofp i32 %count to double
  %mul = fmul double %conv, %v1
  %1 = sext i32 %count to i64
  %2 = sext i32 %count to i64
  %3 = add i64 %2, -1
  %xtraiter = and i64 %2, 3
  %lcmp.mod = icmp ne i64 %xtraiter, 0
  %4 = icmp ult i64 %3, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit
  %5 = phi i32 [ %8, %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc6, %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %polly.stmt.for.inc.preheader, label %for.end

polly.stmt.for.inc.preheader:                     ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %polly.stmt.for.inc.prol.preheader, label %polly.stmt.for.inc.preheader.split

polly.stmt.for.inc.prol.preheader:                ; preds = %polly.stmt.for.inc.preheader
  br label %polly.stmt.for.inc.prol

polly.stmt.for.inc.prol:                          ; preds = %polly.stmt.for.inc.prol.preheader, %polly.stmt.for.inc.prol
  %result.09.reg2mem.0.prol = phi double [ %p_add.prol, %polly.stmt.for.inc.prol ], [ 0.000000e+00, %polly.stmt.for.inc.prol.preheader ]
  %polly.indvar.prol = phi i64 [ %polly.indvar_next.prol, %polly.stmt.for.inc.prol ], [ 0, %polly.stmt.for.inc.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.sub, %polly.stmt.for.inc.prol ], [ %xtraiter, %polly.stmt.for.inc.prol.preheader ]
  %scevgep.prol = getelementptr double, double* %first, i64 %polly.indvar.prol
  %_p_scalar_.prol = load double, double* %scevgep.prol, align 8, !alias.scope !411, !noalias !413
  %p_add.prol = fadd double %result.09.reg2mem.0.prol, %_p_scalar_.prol
  %polly.indvar_next.prol = add nuw nsw i64 %polly.indvar.prol, 1
  %prol.iter.sub = sub i64 %prol.iter, 1
  %prol.iter.cmp = icmp ne i64 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %polly.stmt.for.inc.prol, label %polly.stmt.for.inc.preheader.split.loopexit, !llvm.loop !418

polly.stmt.for.inc.preheader.split.loopexit:      ; preds = %polly.stmt.for.inc.prol
  %polly.indvar_next.prol.lcssa = phi i64 [ %polly.indvar_next.prol, %polly.stmt.for.inc.prol ]
  %p_add.prol.lcssa = phi double [ %p_add.prol, %polly.stmt.for.inc.prol ]
  br label %polly.stmt.for.inc.preheader.split

polly.stmt.for.inc.preheader.split:               ; preds = %polly.stmt.for.inc.preheader.split.loopexit, %polly.stmt.for.inc.preheader
  %p_add.lcssa.unr = phi double [ 0.000000e+00, %polly.stmt.for.inc.preheader ], [ %p_add.prol.lcssa, %polly.stmt.for.inc.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %polly.stmt.for.inc.preheader ], [ %p_add.prol.lcssa, %polly.stmt.for.inc.preheader.split.loopexit ]
  %polly.indvar.unr = phi i64 [ 0, %polly.stmt.for.inc.preheader ], [ %polly.indvar_next.prol.lcssa, %polly.stmt.for.inc.preheader.split.loopexit ]
  br i1 %4, label %for.end.loopexit, label %polly.stmt.for.inc.preheader.split.split

polly.stmt.for.inc.preheader.split.split:         ; preds = %polly.stmt.for.inc.preheader.split
  br label %polly.stmt.for.inc

for.end.loopexit.unr-lcssa:                       ; preds = %polly.stmt.for.inc
  %p_add.3.lcssa = phi double [ %p_add.3, %polly.stmt.for.inc ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %polly.stmt.for.inc.preheader.split, %for.end.loopexit.unr-lcssa
  %p_add.lcssa = phi double [ %p_add.lcssa.unr, %polly.stmt.for.inc.preheader.split ], [ %p_add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %p_add.lcssa, %for.end.loopexit ]
  %add4 = fadd double %mul, %result.0.lcssa.reg2mem.0
  %6 = load double, double* @init_value, align 8, !tbaa !13
  %add.i.i = fadd double %6, %v1
  %mul.i = fmul double %add.i.i, 8.000000e+03
  %sub.i.i = fsub double %add4, %mul.i
  %call.i.i = tail call double @fabs(double %add4) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i.i = fdiv double %sub.i.i, %add4
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i.i, double %sub.i.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %7 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %7) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit

_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %8 = phi i32 [ %5, %for.end ], [ %.pre, %if.then.i ]
  %inc6 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc6, %8
  br i1 %cmp, label %for.cond1.preheader, label %for.end7.loopexit

for.end7.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId19custom_add_variableIdEEvT_S2_.exit
  br label %for.end7

for.end7:                                         ; preds = %for.end7.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %9 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %9
  %conv.i = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i, 1.000000e+06
  %10 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %10, null
  %11 = bitcast %struct.one_result* %10 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end7
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i17

lor.lhs.false.i:                                  ; preds = %for.end7
  %12 = load i32, i32* @current_test, align 4, !tbaa !5
  %13 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %12, %13
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i17

if.then.i17:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %14 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %add.i = add nsw i32 %14, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i14 = sext i32 %add.i to i64
  %mul.i15 = shl nsw i64 %conv.i14, 4
  %call.i16 = tail call i8* @realloc(i8* %11, i64 %mul.i15) #5
  store i8* %call.i16, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i16, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i17
  %15 = bitcast i8* %call.i16 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i17
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %16) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %17 = phi %struct.one_result* [ %15, %if.then.if.end5_crit_edge.i ], [ %10, %lor.lhs.false.i ]
  %18 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %12, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %18 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %17, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %17, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %18, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void

polly.stmt.for.inc:                               ; preds = %polly.stmt.for.inc, %polly.stmt.for.inc.preheader.split.split
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %polly.stmt.for.inc.preheader.split.split ], [ %p_add.3, %polly.stmt.for.inc ]
  %polly.indvar = phi i64 [ %polly.indvar.unr, %polly.stmt.for.inc.preheader.split.split ], [ %polly.indvar_next.3, %polly.stmt.for.inc ]
  %scevgep = getelementptr double, double* %first, i64 %polly.indvar
  %_p_scalar_ = load double, double* %scevgep, align 8, !alias.scope !411, !noalias !413
  %p_add = fadd double %result.09.reg2mem.0, %_p_scalar_
  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
  %scevgep.1 = getelementptr double, double* %first, i64 %polly.indvar_next
  %_p_scalar_.1 = load double, double* %scevgep.1, align 8, !alias.scope !411, !noalias !413
  %p_add.1 = fadd double %p_add, %_p_scalar_.1
  %polly.indvar_next.1 = add nuw nsw i64 %polly.indvar_next, 1
  %scevgep.2 = getelementptr double, double* %first, i64 %polly.indvar_next.1
  %_p_scalar_.2 = load double, double* %scevgep.2, align 8, !alias.scope !411, !noalias !413
  %p_add.2 = fadd double %p_add.1, %_p_scalar_.2
  %polly.indvar_next.2 = add nuw nsw i64 %polly.indvar_next.1, 1
  %scevgep.3 = getelementptr double, double* %first, i64 %polly.indvar_next.2
  %_p_scalar_.3 = load double, double* %scevgep.3, align 8, !alias.scope !411, !noalias !413
  %p_add.3 = fadd double %p_add.2, %_p_scalar_.3
  %polly.indvar_next.3 = add nuw nsw i64 %polly.indvar_next.2, 1
  %exitcond.3 = icmp eq i64 %polly.indvar_next.3, %1
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %polly.stmt.for.inc
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Id28custom_add_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* nocapture readonly %first, i32 %count, double %v1, double %v2, double %v3, double %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId28custom_add_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %9, %_Z26check_shifted_variable_sumId28custom_add_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId28custom_add_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %4 = load double, double* %first, align 8, !tbaa !13
  %add.i.prol = fadd double %4, %v1
  %add1.i.prol = fadd double %add.i.prol, %v2
  %add2.i.prol = fadd double %add1.i.prol, %v3
  %add3.i.prol = fadd double %add2.i.prol, %v4
  %add.prol = fadd double 0.000000e+00, %add3.i.prol
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ 1, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %add.i = fadd double %5, %v1
  %add1.i = fadd double %add.i, %v2
  %add2.i = fadd double %add1.i, %v3
  %add3.i = fadd double %add2.i, %v4
  %add = fadd double %result.09.reg2mem.0, %add3.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %add.i.1 = fadd double %6, %v1
  %add1.i.1 = fadd double %add.i.1, %v2
  %add2.i.1 = fadd double %add1.i.1, %v3
  %add3.i.1 = fadd double %add2.i.1, %v4
  %add.1 = fadd double %add, %add3.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi double [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %7 = load double, double* @init_value, align 8, !tbaa !13
  %add.i.i = fadd double %7, %v1
  %add1.i.i = fadd double %add.i.i, %v2
  %add2.i.i = fadd double %add1.i.i, %v3
  %add3.i.i = fadd double %add2.i.i, %v4
  %mul.i = fmul double %add3.i.i, 8.000000e+03
  %sub.i.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i.i = fdiv double %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i.i, double %sub.i.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId28custom_add_multiple_variableIdEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %8 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %8) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId28custom_add_multiple_variableIdEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumId28custom_add_multiple_variableIdEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %9 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %9
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId28custom_add_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %10 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %10
  %conv.i = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i, 1.000000e+06
  %11 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %11, null
  %12 = bitcast %struct.one_result* %11 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %13 = load i32, i32* @current_test, align 4, !tbaa !5
  %14 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %13, %14
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %15 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %14, %lor.lhs.false.i ]
  %add.i14 = add nsw i32 %15, 10
  store i32 %add.i14, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i14 to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %12, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %16 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %17 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %17) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %18 = phi %struct.one_result* [ %16, %if.then.if.end5_crit_edge.i ], [ %11, %lor.lhs.false.i ]
  %19 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %19 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %18, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %18, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %19, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Id19custom_sub_variableIdEEvPT_iS2_PKc(double* nocapture readonly %first, i32 %count, double %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId19custom_sub_variableIdEEvT_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumId19custom_sub_variableIdEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId19custom_sub_variableIdEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi double [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds double, double* %first, i64 %indvars.iv.prol
  %4 = load double, double* %arrayidx.prol, align 8, !tbaa !13
  %sub.i.prol = fsub double %4, %v1
  %add.prol = fadd double %result.09.reg2mem.0.prol, %sub.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !419

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi double [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %sub.i = fsub double %5, %v1
  %add = fadd double %result.09.reg2mem.0, %sub.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %sub.i.1 = fsub double %6, %v1
  %add.1 = fadd double %add, %sub.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.1
  %7 = load double, double* %arrayidx.2, align 8, !tbaa !13
  %sub.i.2 = fsub double %7, %v1
  %add.2 = fadd double %add.1, %sub.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.2
  %8 = load double, double* %arrayidx.3, align 8, !tbaa !13
  %sub.i.3 = fsub double %8, %v1
  %add.3 = fadd double %add.2, %sub.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi double [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %sub.i.i = fsub double %9, %v1
  %mul.i = fmul double %sub.i.i, 8.000000e+03
  %sub.i3.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i.i = fdiv double %sub.i3.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i.i, double %sub.i3.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId19custom_sub_variableIdEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId19custom_sub_variableIdEEvT_S2_.exit

_Z26check_shifted_variable_sumId19custom_sub_variableIdEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId19custom_sub_variableIdEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %12
  %conv.i = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i = add nsw i32 %17, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %14, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %18 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Id28custom_sub_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* nocapture readonly %first, i32 %count, double %v1, double %v2, double %v3, double %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId28custom_sub_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %9, %_Z26check_shifted_variable_sumId28custom_sub_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId28custom_sub_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %4 = load double, double* %first, align 8, !tbaa !13
  %sub.i.prol = fsub double %4, %v1
  %sub1.i.prol = fsub double %sub.i.prol, %v2
  %sub2.i.prol = fsub double %sub1.i.prol, %v3
  %sub3.i.prol = fsub double %sub2.i.prol, %v4
  %add.prol = fadd double 0.000000e+00, %sub3.i.prol
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ 1, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %sub.i = fsub double %5, %v1
  %sub1.i = fsub double %sub.i, %v2
  %sub2.i = fsub double %sub1.i, %v3
  %sub3.i = fsub double %sub2.i, %v4
  %add = fadd double %result.09.reg2mem.0, %sub3.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %sub.i.1 = fsub double %6, %v1
  %sub1.i.1 = fsub double %sub.i.1, %v2
  %sub2.i.1 = fsub double %sub1.i.1, %v3
  %sub3.i.1 = fsub double %sub2.i.1, %v4
  %add.1 = fadd double %add, %sub3.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi double [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %7 = load double, double* @init_value, align 8, !tbaa !13
  %sub.i.i = fsub double %7, %v1
  %sub1.i.i = fsub double %sub.i.i, %v2
  %sub2.i.i = fsub double %sub1.i.i, %v3
  %sub3.i.i = fsub double %sub2.i.i, %v4
  %mul.i = fmul double %sub3.i.i, 8.000000e+03
  %sub.i3.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i.i = fdiv double %sub.i3.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i.i, double %sub.i3.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId28custom_sub_multiple_variableIdEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %8 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %8) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId28custom_sub_multiple_variableIdEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumId28custom_sub_multiple_variableIdEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %9 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %9
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId28custom_sub_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %10 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i14 = sub nsw i64 %call.i13, %10
  %conv.i = sitofp i64 %sub.i14 to double
  %div.i = fdiv double %conv.i, 1.000000e+06
  %11 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %11, null
  %12 = bitcast %struct.one_result* %11 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %13 = load i32, i32* @current_test, align 4, !tbaa !5
  %14 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %13, %14
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %15 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %14, %lor.lhs.false.i ]
  %add.i = add nsw i32 %15, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %12, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %16 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %17 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %17) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %18 = phi %struct.one_result* [ %16, %if.then.if.end5_crit_edge.i ], [ %11, %lor.lhs.false.i ]
  %19 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %19 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %18, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %18, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %19, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Id24custom_multiply_variableIdEEvPT_iS2_PKc(double* nocapture readonly %first, i32 %count, double %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId24custom_multiply_variableIdEEvT_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumId24custom_multiply_variableIdEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId24custom_multiply_variableIdEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi double [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds double, double* %first, i64 %indvars.iv.prol
  %4 = load double, double* %arrayidx.prol, align 8, !tbaa !13
  %mul.i.prol = fmul double %4, %v1
  %add.prol = fadd double %result.09.reg2mem.0.prol, %mul.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !420

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi double [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %mul.i = fmul double %5, %v1
  %add = fadd double %result.09.reg2mem.0, %mul.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %mul.i.1 = fmul double %6, %v1
  %add.1 = fadd double %add, %mul.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.1
  %7 = load double, double* %arrayidx.2, align 8, !tbaa !13
  %mul.i.2 = fmul double %7, %v1
  %add.2 = fadd double %add.1, %mul.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.2
  %8 = load double, double* %arrayidx.3, align 8, !tbaa !13
  %mul.i.3 = fmul double %8, %v1
  %add.3 = fadd double %add.2, %mul.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi double [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %mul.i.i = fmul double %9, %v1
  %mul.i13 = fmul double %mul.i.i, 8.000000e+03
  %sub.i.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i13
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i.i = fdiv double %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i.i, double %sub.i.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId24custom_multiply_variableIdEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId24custom_multiply_variableIdEEvT_S2_.exit

_Z26check_shifted_variable_sumId24custom_multiply_variableIdEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId24custom_multiply_variableIdEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %12
  %conv.i = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i = add nsw i32 %17, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %14, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %18 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Id33custom_multiply_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* nocapture readonly %first, i32 %count, double %v1, double %v2, double %v3, double %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId33custom_multiply_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %9, %_Z26check_shifted_variable_sumId33custom_multiply_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId33custom_multiply_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %4 = load double, double* %first, align 8, !tbaa !13
  %mul.i.prol = fmul double %4, %v1
  %mul1.i.prol = fmul double %mul.i.prol, %v2
  %mul2.i.prol = fmul double %mul1.i.prol, %v3
  %mul3.i.prol = fmul double %mul2.i.prol, %v4
  %add.prol = fadd double 0.000000e+00, %mul3.i.prol
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ 1, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %mul.i = fmul double %5, %v1
  %mul1.i = fmul double %mul.i, %v2
  %mul2.i = fmul double %mul1.i, %v3
  %mul3.i = fmul double %mul2.i, %v4
  %add = fadd double %result.09.reg2mem.0, %mul3.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %mul.i.1 = fmul double %6, %v1
  %mul1.i.1 = fmul double %mul.i.1, %v2
  %mul2.i.1 = fmul double %mul1.i.1, %v3
  %mul3.i.1 = fmul double %mul2.i.1, %v4
  %add.1 = fadd double %add, %mul3.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi double [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %7 = load double, double* @init_value, align 8, !tbaa !13
  %mul.i.i = fmul double %7, %v1
  %mul1.i.i = fmul double %mul.i.i, %v2
  %mul2.i.i = fmul double %mul1.i.i, %v3
  %mul3.i.i = fmul double %mul2.i.i, %v4
  %mul.i13 = fmul double %mul3.i.i, 8.000000e+03
  %sub.i.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i13
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i.i = fdiv double %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i.i, double %sub.i.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId33custom_multiply_multiple_variableIdEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %8 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %8) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId33custom_multiply_multiple_variableIdEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumId33custom_multiply_multiple_variableIdEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %9 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %9
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId33custom_multiply_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %10 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %10
  %conv.i = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i, 1.000000e+06
  %11 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %11, null
  %12 = bitcast %struct.one_result* %11 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %13 = load i32, i32* @current_test, align 4, !tbaa !5
  %14 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %13, %14
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %15 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %14, %lor.lhs.false.i ]
  %add.i = add nsw i32 %15, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %12, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %16 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %17 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %17) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %18 = phi %struct.one_result* [ %16, %if.then.if.end5_crit_edge.i ], [ %11, %lor.lhs.false.i ]
  %19 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %19 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %18, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %18, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %19, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Id34custom_multiply_multiple_variable2IdEEvPT_iS2_S2_S2_S2_PKc(double* nocapture readonly %first, i32 %count, double %v1, double %v2, double %v3, double %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = fmul double %v1, %v2
  %mul1.i.i = fmul double %mul.i.i, %v3
  %mul2.i.i = fmul double %mul1.i.i, %v4
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId34custom_multiply_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumId34custom_multiply_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId34custom_multiply_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi double [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds double, double* %first, i64 %indvars.iv.prol
  %4 = load double, double* %arrayidx.prol, align 8, !tbaa !13
  %add.i.prol = fadd double %mul2.i.i, %4
  %add.prol = fadd double %result.09.reg2mem.0.prol, %add.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !421

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi double [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %add.i = fadd double %mul2.i.i, %5
  %add = fadd double %result.09.reg2mem.0, %add.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %add.i.1 = fadd double %mul2.i.i, %6
  %add.1 = fadd double %add, %add.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.1
  %7 = load double, double* %arrayidx.2, align 8, !tbaa !13
  %add.i.2 = fadd double %mul2.i.i, %7
  %add.2 = fadd double %add.1, %add.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.2
  %8 = load double, double* %arrayidx.3, align 8, !tbaa !13
  %add.i.3 = fadd double %mul2.i.i, %8
  %add.3 = fadd double %add.2, %add.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi double [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %add.i.i = fadd double %mul2.i.i, %9
  %mul.i13 = fmul double %add.i.i, 8.000000e+03
  %sub.i.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i13
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i.i = fdiv double %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i.i, double %sub.i.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId34custom_multiply_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId34custom_multiply_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumId34custom_multiply_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId34custom_multiply_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i14, %12
  %conv.i = sitofp i64 %sub.i to double
  %div.i = fdiv double %conv.i, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %17, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %14, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %18 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable1Id22custom_divide_variableIdEEvPT_iS2_PKc(double* nocapture readonly %first, i32 %count, double %v1, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId22custom_divide_variableIdEEvT_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumId22custom_divide_variableIdEEvT_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId22custom_divide_variableIdEEvT_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi double [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds double, double* %first, i64 %indvars.iv.prol
  %4 = load double, double* %arrayidx.prol, align 8, !tbaa !13
  %div.i.prol = fdiv double %4, %v1
  %add.prol = fadd double %result.09.reg2mem.0.prol, %div.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !422

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi double [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %div.i = fdiv double %5, %v1
  %add = fadd double %result.09.reg2mem.0, %div.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %div.i.1 = fdiv double %6, %v1
  %add.1 = fadd double %add, %div.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.1
  %7 = load double, double* %arrayidx.2, align 8, !tbaa !13
  %div.i.2 = fdiv double %7, %v1
  %add.2 = fadd double %add.1, %div.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.2
  %8 = load double, double* %arrayidx.3, align 8, !tbaa !13
  %div.i.3 = fdiv double %8, %v1
  %add.3 = fadd double %add.2, %div.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi double [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %div.i.i = fdiv double %9, %v1
  %mul.i = fmul double %div.i.i, 8.000000e+03
  %sub.i.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i3.i = fdiv double %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i3.i, double %sub.i.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId22custom_divide_variableIdEEvT_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId22custom_divide_variableIdEEvT_S2_.exit

_Z26check_shifted_variable_sumId22custom_divide_variableIdEEvT_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId22custom_divide_variableIdEEvT_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %12
  %conv.i = sitofp i64 %sub.i to double
  %div.i14 = fdiv double %conv.i, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i = add nsw i32 %17, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %14, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %18 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i14, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Id31custom_divide_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* nocapture readonly %first, i32 %count, double %v1, double %v2, double %v3, double %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 1
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 1
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId31custom_divide_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %9, %_Z26check_shifted_variable_sumId31custom_divide_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId31custom_divide_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol, label %for.body3.preheader.split

for.body3.prol:                                   ; preds = %for.body3.preheader
  %4 = load double, double* %first, align 8, !tbaa !13
  %div.i.prol = fdiv double %4, %v1
  %div1.i.prol = fdiv double %div.i.prol, %v2
  %div2.i.prol = fdiv double %div1.i.prol, %v3
  %div3.i.prol = fdiv double %div2.i.prol, %v4
  %add.prol = fadd double 0.000000e+00, %div3.i.prol
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.prol, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ 1, %for.body3.prol ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol, %for.body3.prol ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.1, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.1, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %div.i = fdiv double %5, %v1
  %div1.i = fdiv double %div.i, %v2
  %div2.i = fdiv double %div1.i, %v3
  %div3.i = fdiv double %div2.i, %v4
  %add = fadd double %result.09.reg2mem.0, %div3.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %div.i.1 = fdiv double %6, %v1
  %div1.i.1 = fdiv double %div.i.1, %v2
  %div2.i.1 = fdiv double %div1.i.1, %v3
  %div3.i.1 = fdiv double %div2.i.1, %v4
  %add.1 = fadd double %add, %div3.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.1 = icmp eq i32 %lftr.wideiv.1, %count
  br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.1.lcssa = phi double [ %add.1, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.1.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %7 = load double, double* @init_value, align 8, !tbaa !13
  %div.i.i = fdiv double %7, %v1
  %div1.i.i = fdiv double %div.i.i, %v2
  %div2.i.i = fdiv double %div1.i.i, %v3
  %div3.i.i = fdiv double %div2.i.i, %v4
  %mul.i = fmul double %div3.i.i, 8.000000e+03
  %sub.i.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i3.i = fdiv double %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i3.i, double %sub.i.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId31custom_divide_multiple_variableIdEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %8 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %8) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId31custom_divide_multiple_variableIdEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumId31custom_divide_multiple_variableIdEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %9 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %9
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId31custom_divide_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %10 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %10
  %conv.i = sitofp i64 %sub.i to double
  %div.i14 = fdiv double %conv.i, 1.000000e+06
  %11 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %11, null
  %12 = bitcast %struct.one_result* %11 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i18

lor.lhs.false.i:                                  ; preds = %for.end6
  %13 = load i32, i32* @current_test, align 4, !tbaa !5
  %14 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %13, %14
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i18

if.then.i18:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %15 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %14, %lor.lhs.false.i ]
  %add.i = add nsw i32 %15, 10
  store i32 %add.i, i32* @allocated_results, align 4, !tbaa !5
  %conv.i15 = sext i32 %add.i to i64
  %mul.i16 = shl nsw i64 %conv.i15, 4
  %call.i17 = tail call i8* @realloc(i8* %12, i64 %mul.i16) #5
  store i8* %call.i17, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i17, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i18
  %16 = bitcast i8* %call.i17 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i18
  %17 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %17) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %18 = phi %struct.one_result* [ %16, %if.then.if.end5_crit_edge.i ], [ %11, %lor.lhs.false.i ]
  %19 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %19 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %18, i64 %idxprom.i, i32 0
  store double %div.i14, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %18, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %19, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Id32custom_divide_multiple_variable2IdEEvPT_iS2_S2_S2_S2_PKc(double* nocapture readonly %first, i32 %count, double %v1, double %v2, double %v3, double %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %div.i.i = fdiv double %v1, %v2
  %div1.i.i = fdiv double %div.i.i, %v3
  %div2.i.i = fdiv double %div1.i.i, %v4
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId32custom_divide_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumId32custom_divide_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId32custom_divide_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi double [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds double, double* %first, i64 %indvars.iv.prol
  %4 = load double, double* %arrayidx.prol, align 8, !tbaa !13
  %add.i.prol = fadd double %4, %div2.i.i
  %add.prol = fadd double %result.09.reg2mem.0.prol, %add.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !423

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi double [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %add.i = fadd double %5, %div2.i.i
  %add = fadd double %result.09.reg2mem.0, %add.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %add.i.1 = fadd double %6, %div2.i.i
  %add.1 = fadd double %add, %add.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.1
  %7 = load double, double* %arrayidx.2, align 8, !tbaa !13
  %add.i.2 = fadd double %7, %div2.i.i
  %add.2 = fadd double %add.1, %add.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.2
  %8 = load double, double* %arrayidx.3, align 8, !tbaa !13
  %add.i.3 = fadd double %8, %div2.i.i
  %add.3 = fadd double %add.2, %add.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi double [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %add.i.i = fadd double %9, %div2.i.i
  %mul.i = fmul double %add.i.i, 8.000000e+03
  %sub.i.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i3.i = fdiv double %sub.i.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i3.i, double %sub.i.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId32custom_divide_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId32custom_divide_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumId32custom_divide_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId32custom_divide_multiple_variable2IdEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i13 = tail call i64 @clock() #5
  store i64 %call.i13, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i = sub nsw i64 %call.i13, %12
  %conv.i = sitofp i64 %sub.i to double
  %div.i14 = fdiv double %conv.i, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i19

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i19

if.then.i19:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i15 = add nsw i32 %17, 10
  store i32 %add.i15, i32* @allocated_results, align 4, !tbaa !5
  %conv.i16 = sext i32 %add.i15 to i64
  %mul.i17 = shl nsw i64 %conv.i16, 4
  %call.i18 = tail call i8* @realloc(i8* %14, i64 %mul.i17) #5
  store i8* %call.i18, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i18, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i19
  %18 = bitcast i8* %call.i18 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i19
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i14, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_Z14test_variable4Id30custom_mixed_multiple_variableIdEEvPT_iS2_S2_S2_S2_PKc(double* nocapture readonly %first, i32 %count, double %v1, double %v2, double %v3, double %v4, i8* %label) #0 comdat {
entry:
  %call.i = tail call i64 @clock() #5
  store i64 %call.i, i64* @start_time, align 8, !tbaa !11
  %0 = load i32, i32* @iterations, align 4, !tbaa !5
  %cmp11 = icmp sgt i32 %0, 0
  br i1 %cmp11, label %for.cond1.preheader.preheader, label %for.end6

for.cond1.preheader.preheader:                    ; preds = %entry
  %cmp28 = icmp sgt i32 %count, 0
  %mul.i.i = fmul double %v2, %v3
  %div.i.i = fdiv double %mul.i.i, %v4
  %1 = add i32 %count, -1
  %xtraiter = and i32 %count, 3
  %lcmp.mod = icmp ne i32 %xtraiter, 0
  %2 = icmp ult i32 %1, 3
  br label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %_Z26check_shifted_variable_sumId30custom_mixed_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  %3 = phi i32 [ %11, %_Z26check_shifted_variable_sumId30custom_mixed_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ %0, %for.cond1.preheader.preheader ]
  %i.012 = phi i32 [ %inc5, %_Z26check_shifted_variable_sumId30custom_mixed_multiple_variableIdEEvT_S2_S2_S2_S2_.exit ], [ 0, %for.cond1.preheader.preheader ]
  br i1 %cmp28, label %for.body3.preheader, label %for.end

for.body3.preheader:                              ; preds = %for.cond1.preheader
  br i1 %lcmp.mod, label %for.body3.prol.preheader, label %for.body3.preheader.split

for.body3.prol.preheader:                         ; preds = %for.body3.preheader
  br label %for.body3.prol

for.body3.prol:                                   ; preds = %for.body3.prol.preheader, %for.body3.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ], [ 0, %for.body3.prol.preheader ]
  %result.09.reg2mem.0.prol = phi double [ %add.prol, %for.body3.prol ], [ 0.000000e+00, %for.body3.prol.preheader ]
  %prol.iter = phi i32 [ %prol.iter.sub, %for.body3.prol ], [ %xtraiter, %for.body3.prol.preheader ]
  %arrayidx.prol = getelementptr inbounds double, double* %first, i64 %indvars.iv.prol
  %4 = load double, double* %arrayidx.prol, align 8, !tbaa !13
  %add.i.prol = fadd double %4, %v1
  %sub.i.prol = fsub double %add.i.prol, %div.i.i
  %add.prol = fadd double %result.09.reg2mem.0.prol, %sub.i.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.sub = sub i32 %prol.iter, 1
  %prol.iter.cmp = icmp ne i32 %prol.iter.sub, 0
  br i1 %prol.iter.cmp, label %for.body3.prol, label %for.body3.preheader.split.loopexit, !llvm.loop !424

for.body3.preheader.split.loopexit:               ; preds = %for.body3.prol
  %indvars.iv.next.prol.lcssa = phi i64 [ %indvars.iv.next.prol, %for.body3.prol ]
  %add.prol.lcssa = phi double [ %add.prol, %for.body3.prol ]
  br label %for.body3.preheader.split

for.body3.preheader.split:                        ; preds = %for.body3.preheader.split.loopexit, %for.body3.preheader
  %add.lcssa.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %indvars.iv.unr = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next.prol.lcssa, %for.body3.preheader.split.loopexit ]
  %result.09.reg2mem.0.unr = phi double [ 0.000000e+00, %for.body3.preheader ], [ %add.prol.lcssa, %for.body3.preheader.split.loopexit ]
  br i1 %2, label %for.end.loopexit, label %for.body3.preheader.split.split

for.body3.preheader.split.split:                  ; preds = %for.body3.preheader.split
  br label %for.body3

for.body3:                                        ; preds = %for.body3, %for.body3.preheader.split.split
  %indvars.iv = phi i64 [ %indvars.iv.unr, %for.body3.preheader.split.split ], [ %indvars.iv.next.3, %for.body3 ]
  %result.09.reg2mem.0 = phi double [ %result.09.reg2mem.0.unr, %for.body3.preheader.split.split ], [ %add.3, %for.body3 ]
  %arrayidx = getelementptr inbounds double, double* %first, i64 %indvars.iv
  %5 = load double, double* %arrayidx, align 8, !tbaa !13
  %add.i = fadd double %5, %v1
  %sub.i = fsub double %add.i, %div.i.i
  %add = fadd double %result.09.reg2mem.0, %sub.i
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %arrayidx.1 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next
  %6 = load double, double* %arrayidx.1, align 8, !tbaa !13
  %add.i.1 = fadd double %6, %v1
  %sub.i.1 = fsub double %add.i.1, %div.i.i
  %add.1 = fadd double %add, %sub.i.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
  %arrayidx.2 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.1
  %7 = load double, double* %arrayidx.2, align 8, !tbaa !13
  %add.i.2 = fadd double %7, %v1
  %sub.i.2 = fsub double %add.i.2, %div.i.i
  %add.2 = fadd double %add.1, %sub.i.2
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.next.1, 1
  %arrayidx.3 = getelementptr inbounds double, double* %first, i64 %indvars.iv.next.2
  %8 = load double, double* %arrayidx.3, align 8, !tbaa !13
  %add.i.3 = fadd double %8, %v1
  %sub.i.3 = fsub double %add.i.3, %div.i.i
  %add.3 = fadd double %add.2, %sub.i.3
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.next.2, 1
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next.3 to i32
  %exitcond.3 = icmp eq i32 %lftr.wideiv.3, %count
  br i1 %exitcond.3, label %for.end.loopexit.unr-lcssa, label %for.body3

for.end.loopexit.unr-lcssa:                       ; preds = %for.body3
  %add.3.lcssa = phi double [ %add.3, %for.body3 ]
  br label %for.end.loopexit

for.end.loopexit:                                 ; preds = %for.body3.preheader.split, %for.end.loopexit.unr-lcssa
  %add.lcssa = phi double [ %add.lcssa.unr, %for.body3.preheader.split ], [ %add.3.lcssa, %for.end.loopexit.unr-lcssa ]
  br label %for.end

for.end:                                          ; preds = %for.end.loopexit, %for.cond1.preheader
  %result.0.lcssa.reg2mem.0 = phi double [ 0.000000e+00, %for.cond1.preheader ], [ %add.lcssa, %for.end.loopexit ]
  %9 = load double, double* @init_value, align 8, !tbaa !13
  %add.i.i = fadd double %9, %v1
  %sub.i.i = fsub double %add.i.i, %div.i.i
  %mul.i13 = fmul double %sub.i.i, 8.000000e+03
  %sub.i3.i = fsub double %result.0.lcssa.reg2mem.0, %mul.i13
  %call.i.i = tail call double @fabs(double %result.0.lcssa.reg2mem.0) #8
  %cmp.i.i = fcmp ogt double %call.i.i, 1.000000e-08
  %div.i4.i = fdiv double %sub.i3.i, %result.0.lcssa.reg2mem.0
  %reldiff.0.i.i = select i1 %cmp.i.i, double %div.i4.i, double %sub.i3.i
  %call1.i.i = tail call double @fabs(double %reldiff.0.i.i) #8
  %cmp2.i.i = fcmp olt double %call1.i.i, 1.000000e-06
  br i1 %cmp2.i.i, label %_Z26check_shifted_variable_sumId30custom_mixed_multiple_variableIdEEvT_S2_S2_S2_S2_.exit, label %if.then.i

if.then.i:                                        ; preds = %for.end
  %10 = load i32, i32* @current_test, align 4, !tbaa !5
  %call2.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str179, i64 0, i64 0), i32 %10) #5
  %.pre = load i32, i32* @iterations, align 4, !tbaa !5
  br label %_Z26check_shifted_variable_sumId30custom_mixed_multiple_variableIdEEvT_S2_S2_S2_S2_.exit

_Z26check_shifted_variable_sumId30custom_mixed_multiple_variableIdEEvT_S2_S2_S2_S2_.exit: ; preds = %for.end, %if.then.i
  %11 = phi i32 [ %3, %for.end ], [ %.pre, %if.then.i ]
  %inc5 = add nuw nsw i32 %i.012, 1
  %cmp = icmp slt i32 %inc5, %11
  br i1 %cmp, label %for.cond1.preheader, label %for.end6.loopexit

for.end6.loopexit:                                ; preds = %_Z26check_shifted_variable_sumId30custom_mixed_multiple_variableIdEEvT_S2_S2_S2_S2_.exit
  br label %for.end6

for.end6:                                         ; preds = %for.end6.loopexit, %entry
  %call.i14 = tail call i64 @clock() #5
  store i64 %call.i14, i64* @end_time, align 8, !tbaa !11
  %12 = load i64, i64* @start_time, align 8, !tbaa !11
  %sub.i15 = sub nsw i64 %call.i14, %12
  %conv.i = sitofp i64 %sub.i15 to double
  %div.i16 = fdiv double %conv.i, 1.000000e+06
  %13 = load %struct.one_result*, %struct.one_result** @results, align 8, !tbaa !1
  %cmp.i = icmp eq %struct.one_result* %13, null
  %14 = bitcast %struct.one_result* %13 to i8*
  br i1 %cmp.i, label %entry.if.then_crit_edge.i, label %lor.lhs.false.i

entry.if.then_crit_edge.i:                        ; preds = %for.end6
  %.pre.i = load i32, i32* @allocated_results, align 4, !tbaa !5
  br label %if.then.i21

lor.lhs.false.i:                                  ; preds = %for.end6
  %15 = load i32, i32* @current_test, align 4, !tbaa !5
  %16 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %cmp1.i = icmp slt i32 %15, %16
  br i1 %cmp1.i, label %_Z13record_resultdPKc.exit, label %if.then.i21

if.then.i21:                                      ; preds = %lor.lhs.false.i, %entry.if.then_crit_edge.i
  %17 = phi i32 [ %.pre.i, %entry.if.then_crit_edge.i ], [ %16, %lor.lhs.false.i ]
  %add.i17 = add nsw i32 %17, 10
  store i32 %add.i17, i32* @allocated_results, align 4, !tbaa !5
  %conv.i18 = sext i32 %add.i17 to i64
  %mul.i19 = shl nsw i64 %conv.i18, 4
  %call.i20 = tail call i8* @realloc(i8* %14, i64 %mul.i19) #5
  store i8* %call.i20, i8** bitcast (%struct.one_result** @results to i8**), align 8, !tbaa !1
  %cmp2.i = icmp eq i8* %call.i20, null
  br i1 %cmp2.i, label %if.then3.i, label %if.then.if.end5_crit_edge.i

if.then.if.end5_crit_edge.i:                      ; preds = %if.then.i21
  %18 = bitcast i8* %call.i20 to %struct.one_result*
  %.pre10.i = load i32, i32* @current_test, align 4, !tbaa !5
  br label %_Z13record_resultdPKc.exit

if.then3.i:                                       ; preds = %if.then.i21
  %19 = load i32, i32* @allocated_results, align 4, !tbaa !5
  %call4.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 %19) #5
  tail call void @exit(i32 -1) #6
  unreachable

_Z13record_resultdPKc.exit:                       ; preds = %lor.lhs.false.i, %if.then.if.end5_crit_edge.i
  %20 = phi %struct.one_result* [ %18, %if.then.if.end5_crit_edge.i ], [ %13, %lor.lhs.false.i ]
  %21 = phi i32 [ %.pre10.i, %if.then.if.end5_crit_edge.i ], [ %15, %lor.lhs.false.i ]
  %idxprom.i = sext i32 %21 to i64
  %time6.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 0
  store double %div.i16, double* %time6.i, align 8, !tbaa !7
  %label9.i = getelementptr inbounds %struct.one_result, %struct.one_result* %20, i64 %idxprom.i, i32 1
  store i8* %label, i8** %label9.i, align 8, !tbaa !10
  %inc.i = add nsw i32 %21, 1
  store i32 %inc.i, i32* @current_test, align 4, !tbaa !5
  ret void
}

; Function Attrs: nounwind
declare i64 @strtol(i8* readonly, i8** nocapture, i32) #1

; Function Attrs: nounwind
declare double @strtod(i8* readonly, i8** nocapture) #1

; Function Attrs: nounwind readnone
declare double @fabs(double) #4

declare float @fabsf(float)

; Function Attrs: nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #5

attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #2 = { noreturn nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #3 = { nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind readnone "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { nounwind }
attributes #6 = { noreturn nounwind }
attributes #7 = { nounwind readonly }
attributes #8 = { nounwind readnone }

!llvm.ident = !{!0}

!0 = !{!"clang version 3.7.0  (llvm/trunk 236099)"}
!1 = !{!2, !2, i64 0}
!2 = !{!"any pointer", !3, i64 0}
!3 = !{!"omnipotent char", !4, i64 0}
!4 = !{!"Simple C/C++ TBAA"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !3, i64 0}
!7 = !{!8, !9, i64 0}
!8 = !{!"_ZTS10one_result", !9, i64 0, !2, i64 8}
!9 = !{!"double", !3, i64 0}
!10 = !{!8, !2, i64 8}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !3, i64 0}
!13 = !{!9, !9, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"short", !3, i64 0}
!16 = distinct !{!16, !17, !18}
!17 = !{!"llvm.loop.vectorize.width", i32 1}
!18 = !{!"llvm.loop.interleave.count", i32 1}
!19 = distinct !{!19, !17, !18}
!20 = distinct !{!20, !17, !18}
!21 = distinct !{!21, !17, !18}
!22 = distinct !{!22, !17, !18}
!23 = distinct !{!23, !17, !18}
!24 = !{!25, !25, i64 0}
!25 = !{!"float", !3, i64 0}
!26 = distinct !{!26, !17, !18}
!27 = distinct !{!27, !17, !18}
!28 = !{!3, !3, i64 0}
!29 = distinct !{!29, !30, !17, !18}
!30 = !{!"llvm.loop.unroll.runtime.disable"}
!31 = distinct !{!31, !17, !18}
!32 = distinct !{!32, !33, !"polly.alias.scope.first"}
!33 = distinct !{!33, !"polly.alias.scope.domain"}
!34 = !{!35, !36, !37, !38}
!35 = distinct !{!35, !33, !"polly.alias.scope.result.017.reg2mem"}
!36 = distinct !{!36, !33, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!37 = distinct !{!37, !33, !"polly.alias.scope.result.017.reload.s2a"}
!38 = distinct !{!38, !33, !"polly.alias.scope..s2a"}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.unroll.disable"}
!41 = distinct !{!41, !17, !18}
!42 = distinct !{!42, !30, !17, !18}
!43 = distinct !{!43, !30, !17, !18}
!44 = distinct !{!44, !17, !18}
!45 = distinct !{!45, !17, !18}
!46 = distinct !{!46, !30, !17, !18}
!47 = distinct !{!47, !17, !18}
!48 = distinct !{!48, !30, !17, !18}
!49 = distinct !{!49, !17, !18}
!50 = distinct !{!50, !30, !17, !18}
!51 = distinct !{!51, !17, !18}
!52 = distinct !{!52, !30, !17, !18}
!53 = distinct !{!53, !17, !18}
!54 = distinct !{!54, !30, !17, !18}
!55 = distinct !{!55, !17, !18}
!56 = distinct !{!56, !40}
!57 = distinct !{!57, !17, !18}
!58 = distinct !{!58, !17, !18}
!59 = distinct !{!59, !17, !18}
!60 = distinct !{!60, !17, !18}
!61 = distinct !{!61, !30, !17, !18}
!62 = distinct !{!62, !17, !18}
!63 = distinct !{!63, !30, !17, !18}
!64 = distinct !{!64, !17, !18}
!65 = distinct !{!65, !30, !17, !18}
!66 = distinct !{!66, !17, !18}
!67 = distinct !{!67, !30, !17, !18}
!68 = distinct !{!68, !17, !18}
!69 = distinct !{!69, !30, !17, !18}
!70 = distinct !{!70, !17, !18}
!71 = distinct !{!71, !30, !17, !18}
!72 = distinct !{!72, !17, !18}
!73 = distinct !{!73, !30, !17, !18}
!74 = distinct !{!74, !17, !18}
!75 = distinct !{!75, !30, !17, !18}
!76 = distinct !{!76, !17, !18}
!77 = distinct !{!77, !30, !17, !18}
!78 = distinct !{!78, !79, !"polly.alias.scope.first"}
!79 = distinct !{!79, !"polly.alias.scope.domain"}
!80 = !{!81, !82, !83, !84}
!81 = distinct !{!81, !79, !"polly.alias.scope.result.014.reload.s2a"}
!82 = distinct !{!82, !79, !"polly.alias.scope..s2a"}
!83 = distinct !{!83, !79, !"polly.alias.scope.result.014.reg2mem"}
!84 = distinct !{!84, !79, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!85 = distinct !{!85, !40}
!86 = distinct !{!86, !17, !18}
!87 = distinct !{!87, !30, !17, !18}
!88 = distinct !{!88, !17, !18}
!89 = distinct !{!89, !30, !17, !18}
!90 = distinct !{!90, !17, !18}
!91 = distinct !{!91, !30, !17, !18}
!92 = distinct !{!92, !17, !18}
!93 = distinct !{!93, !30, !17, !18}
!94 = distinct !{!94, !17, !18}
!95 = distinct !{!95, !30, !17, !18}
!96 = distinct !{!96, !17, !18}
!97 = distinct !{!97, !30, !17, !18}
!98 = distinct !{!98, !17, !18}
!99 = distinct !{!99, !30, !17, !18}
!100 = distinct !{!100, !17, !18}
!101 = distinct !{!101, !40}
!102 = distinct !{!102, !17, !18}
!103 = distinct !{!103, !17, !18}
!104 = distinct !{!104, !17, !18}
!105 = distinct !{!105, !17, !18}
!106 = distinct !{!106, !30, !17, !18}
!107 = distinct !{!107, !17, !18}
!108 = distinct !{!108, !30, !17, !18}
!109 = distinct !{!109, !17, !18}
!110 = distinct !{!110, !30, !17, !18}
!111 = distinct !{!111, !17, !18}
!112 = distinct !{!112, !30, !17, !18}
!113 = distinct !{!113, !17, !18}
!114 = distinct !{!114, !30, !17, !18}
!115 = distinct !{!115, !17, !18}
!116 = distinct !{!116, !30, !17, !18}
!117 = distinct !{!117, !17, !18}
!118 = distinct !{!118, !30, !17, !18}
!119 = distinct !{!119, !17, !18}
!120 = distinct !{!120, !30, !17, !18}
!121 = distinct !{!121, !17, !18}
!122 = distinct !{!122, !30, !17, !18}
!123 = distinct !{!123, !124, !"polly.alias.scope.first"}
!124 = distinct !{!124, !"polly.alias.scope.domain"}
!125 = !{!126, !127, !128, !129}
!126 = distinct !{!126, !124, !"polly.alias.scope..s2a"}
!127 = distinct !{!127, !124, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!128 = distinct !{!128, !124, !"polly.alias.scope.result.017.reload.s2a"}
!129 = distinct !{!129, !124, !"polly.alias.scope.result.017.reg2mem"}
!130 = distinct !{!130, !40}
!131 = distinct !{!131, !17, !18}
!132 = distinct !{!132, !30, !17, !18}
!133 = distinct !{!133, !17, !18}
!134 = distinct !{!134, !30, !17, !18}
!135 = distinct !{!135, !17, !18}
!136 = distinct !{!136, !30, !17, !18}
!137 = distinct !{!137, !17, !18}
!138 = distinct !{!138, !30, !17, !18}
!139 = distinct !{!139, !17, !18}
!140 = distinct !{!140, !30, !17, !18}
!141 = distinct !{!141, !17, !18}
!142 = distinct !{!142, !30, !17, !18}
!143 = distinct !{!143, !17, !18}
!144 = distinct !{!144, !30, !17, !18}
!145 = distinct !{!145, !17, !18}
!146 = distinct !{!146, !40}
!147 = distinct !{!147, !17, !18}
!148 = distinct !{!148, !17, !18}
!149 = distinct !{!149, !17, !18}
!150 = distinct !{!150, !17, !18}
!151 = distinct !{!151, !30, !17, !18}
!152 = distinct !{!152, !17, !18}
!153 = distinct !{!153, !30, !17, !18}
!154 = distinct !{!154, !17, !18}
!155 = distinct !{!155, !30, !17, !18}
!156 = distinct !{!156, !17, !18}
!157 = distinct !{!157, !30, !17, !18}
!158 = distinct !{!158, !17, !18}
!159 = distinct !{!159, !30, !17, !18}
!160 = distinct !{!160, !17, !18}
!161 = distinct !{!161, !30, !17, !18}
!162 = distinct !{!162, !17, !18}
!163 = distinct !{!163, !30, !17, !18}
!164 = distinct !{!164, !17, !18}
!165 = distinct !{!165, !30, !17, !18}
!166 = distinct !{!166, !17, !18}
!167 = distinct !{!167, !30, !17, !18}
!168 = distinct !{!168, !169, !"polly.alias.scope.first"}
!169 = distinct !{!169, !"polly.alias.scope.domain"}
!170 = !{!171, !172, !173, !174}
!171 = distinct !{!171, !169, !"polly.alias.scope..s2a"}
!172 = distinct !{!172, !169, !"polly.alias.scope.result.014.reload.s2a"}
!173 = distinct !{!173, !169, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!174 = distinct !{!174, !169, !"polly.alias.scope.result.014.reg2mem"}
!175 = distinct !{!175, !40}
!176 = distinct !{!176, !17, !18}
!177 = distinct !{!177, !30, !17, !18}
!178 = distinct !{!178, !17, !18}
!179 = distinct !{!179, !30, !17, !18}
!180 = distinct !{!180, !17, !18}
!181 = distinct !{!181, !30, !17, !18}
!182 = distinct !{!182, !17, !18}
!183 = distinct !{!183, !30, !17, !18}
!184 = distinct !{!184, !17, !18}
!185 = distinct !{!185, !30, !17, !18}
!186 = distinct !{!186, !17, !18}
!187 = distinct !{!187, !30, !17, !18}
!188 = distinct !{!188, !17, !18}
!189 = distinct !{!189, !30, !17, !18}
!190 = distinct !{!190, !17, !18}
!191 = distinct !{!191, !40}
!192 = distinct !{!192, !17, !18}
!193 = distinct !{!193, !17, !18}
!194 = distinct !{!194, !17, !18}
!195 = distinct !{!195, !17, !18}
!196 = distinct !{!196, !30, !17, !18}
!197 = distinct !{!197, !17, !18}
!198 = distinct !{!198, !30, !17, !18}
!199 = distinct !{!199, !17, !18}
!200 = distinct !{!200, !30, !17, !18}
!201 = distinct !{!201, !17, !18}
!202 = distinct !{!202, !30, !17, !18}
!203 = distinct !{!203, !17, !18}
!204 = distinct !{!204, !30, !17, !18}
!205 = distinct !{!205, !17, !18}
!206 = distinct !{!206, !30, !17, !18}
!207 = distinct !{!207, !17, !18}
!208 = distinct !{!208, !30, !17, !18}
!209 = distinct !{!209, !17, !18}
!210 = distinct !{!210, !30, !17, !18}
!211 = distinct !{!211, !17, !18}
!212 = distinct !{!212, !30, !17, !18}
!213 = distinct !{!213, !214, !"polly.alias.scope.first"}
!214 = distinct !{!214, !"polly.alias.scope.domain"}
!215 = !{!216, !217, !218, !219}
!216 = distinct !{!216, !214, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!217 = distinct !{!217, !214, !"polly.alias.scope.result.09.reload.s2a"}
!218 = distinct !{!218, !214, !"polly.alias.scope..s2a"}
!219 = distinct !{!219, !214, !"polly.alias.scope.result.09.reg2mem"}
!220 = distinct !{!220, !40}
!221 = distinct !{!221, !17, !18}
!222 = distinct !{!222, !30, !17, !18}
!223 = distinct !{!223, !17, !18}
!224 = distinct !{!224, !30, !17, !18}
!225 = distinct !{!225, !17, !18}
!226 = distinct !{!226, !30, !17, !18}
!227 = distinct !{!227, !17, !18}
!228 = distinct !{!228, !30, !17, !18}
!229 = distinct !{!229, !17, !18}
!230 = distinct !{!230, !30, !17, !18}
!231 = distinct !{!231, !17, !18}
!232 = distinct !{!232, !30, !17, !18}
!233 = distinct !{!233, !17, !18}
!234 = distinct !{!234, !30, !17, !18}
!235 = distinct !{!235, !17, !18}
!236 = distinct !{!236, !40}
!237 = distinct !{!237, !17, !18}
!238 = distinct !{!238, !17, !18}
!239 = distinct !{!239, !17, !18}
!240 = distinct !{!240, !17, !18}
!241 = distinct !{!241, !30, !17, !18}
!242 = distinct !{!242, !17, !18}
!243 = distinct !{!243, !30, !17, !18}
!244 = distinct !{!244, !17, !18}
!245 = distinct !{!245, !30, !17, !18}
!246 = distinct !{!246, !17, !18}
!247 = distinct !{!247, !30, !17, !18}
!248 = distinct !{!248, !17, !18}
!249 = distinct !{!249, !30, !17, !18}
!250 = distinct !{!250, !17, !18}
!251 = distinct !{!251, !30, !17, !18}
!252 = distinct !{!252, !17, !18}
!253 = distinct !{!253, !30, !17, !18}
!254 = distinct !{!254, !17, !18}
!255 = distinct !{!255, !30, !17, !18}
!256 = distinct !{!256, !17, !18}
!257 = distinct !{!257, !30, !17, !18}
!258 = distinct !{!258, !259, !"polly.alias.scope.first"}
!259 = distinct !{!259, !"polly.alias.scope.domain"}
!260 = !{!261, !262, !263, !264}
!261 = distinct !{!261, !259, !"polly.alias.scope..s2a"}
!262 = distinct !{!262, !259, !"polly.alias.scope.result.09.reg2mem"}
!263 = distinct !{!263, !259, !"polly.alias.scope.result.09.reload.s2a"}
!264 = distinct !{!264, !259, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!265 = distinct !{!265, !40}
!266 = distinct !{!266, !17, !18}
!267 = distinct !{!267, !30, !17, !18}
!268 = distinct !{!268, !17, !18}
!269 = distinct !{!269, !30, !17, !18}
!270 = distinct !{!270, !17, !18}
!271 = distinct !{!271, !30, !17, !18}
!272 = distinct !{!272, !17, !18}
!273 = distinct !{!273, !30, !17, !18}
!274 = distinct !{!274, !17, !18}
!275 = distinct !{!275, !30, !17, !18}
!276 = distinct !{!276, !17, !18}
!277 = distinct !{!277, !30, !17, !18}
!278 = distinct !{!278, !17, !18}
!279 = distinct !{!279, !30, !17, !18}
!280 = distinct !{!280, !17, !18}
!281 = distinct !{!281, !40}
!282 = distinct !{!282, !17, !18}
!283 = distinct !{!283, !17, !18}
!284 = distinct !{!284, !17, !18}
!285 = distinct !{!285, !17, !18}
!286 = distinct !{!286, !30, !17, !18}
!287 = distinct !{!287, !17, !18}
!288 = distinct !{!288, !30, !17, !18}
!289 = distinct !{!289, !17, !18}
!290 = distinct !{!290, !30, !17, !18}
!291 = distinct !{!291, !17, !18}
!292 = distinct !{!292, !30, !17, !18}
!293 = distinct !{!293, !17, !18}
!294 = distinct !{!294, !30, !17, !18}
!295 = distinct !{!295, !17, !18}
!296 = distinct !{!296, !30, !17, !18}
!297 = distinct !{!297, !17, !18}
!298 = distinct !{!298, !30, !17, !18}
!299 = distinct !{!299, !17, !18}
!300 = distinct !{!300, !30, !17, !18}
!301 = distinct !{!301, !17, !18}
!302 = distinct !{!302, !30, !17, !18}
!303 = distinct !{!303, !304, !"polly.alias.scope.first"}
!304 = distinct !{!304, !"polly.alias.scope.domain"}
!305 = !{!306, !307, !308, !309}
!306 = distinct !{!306, !304, !"polly.alias.scope.result.09.reg2mem"}
!307 = distinct !{!307, !304, !"polly.alias.scope.result.09.reload.s2a"}
!308 = distinct !{!308, !304, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!309 = distinct !{!309, !304, !"polly.alias.scope..s2a"}
!310 = distinct !{!310, !40}
!311 = distinct !{!311, !17, !18}
!312 = distinct !{!312, !30, !17, !18}
!313 = distinct !{!313, !17, !18}
!314 = distinct !{!314, !30, !17, !18}
!315 = distinct !{!315, !17, !18}
!316 = distinct !{!316, !30, !17, !18}
!317 = distinct !{!317, !17, !18}
!318 = distinct !{!318, !30, !17, !18}
!319 = distinct !{!319, !17, !18}
!320 = distinct !{!320, !40}
!321 = distinct !{!321, !17, !18}
!322 = distinct !{!322, !17, !18}
!323 = distinct !{!323, !40}
!324 = distinct !{!324, !17, !18}
!325 = distinct !{!325, !17, !18}
!326 = distinct !{!326, !30, !17, !18}
!327 = distinct !{!327, !17, !18}
!328 = distinct !{!328, !40}
!329 = distinct !{!329, !17, !18}
!330 = distinct !{!330, !17, !18}
!331 = distinct !{!331, !17, !18}
!332 = distinct !{!332, !17, !18}
!333 = distinct !{!333, !30, !17, !18}
!334 = distinct !{!334, !17, !18}
!335 = distinct !{!335, !30, !17, !18}
!336 = distinct !{!336, !17, !18}
!337 = distinct !{!337, !30, !17, !18}
!338 = distinct !{!338, !17, !18}
!339 = distinct !{!339, !30, !17, !18}
!340 = distinct !{!340, !17, !18}
!341 = distinct !{!341, !30, !17, !18}
!342 = distinct !{!342, !17, !18}
!343 = distinct !{!343, !30, !17, !18}
!344 = distinct !{!344, !17, !18}
!345 = distinct !{!345, !30, !17, !18}
!346 = distinct !{!346, !17, !18}
!347 = distinct !{!347, !30, !17, !18}
!348 = distinct !{!348, !17, !18}
!349 = distinct !{!349, !30, !17, !18}
!350 = distinct !{!350, !351, !"polly.alias.scope.first"}
!351 = distinct !{!351, !"polly.alias.scope.domain"}
!352 = !{!353, !354, !355, !356}
!353 = distinct !{!353, !351, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!354 = distinct !{!354, !351, !"polly.alias.scope..s2a"}
!355 = distinct !{!355, !351, !"polly.alias.scope.result.09.reg2mem"}
!356 = distinct !{!356, !351, !"polly.alias.scope.result.09.reload.s2a"}
!357 = distinct !{!357, !40}
!358 = distinct !{!358, !17, !18}
!359 = distinct !{!359, !30, !17, !18}
!360 = distinct !{!360, !17, !18}
!361 = distinct !{!361, !30, !17, !18}
!362 = distinct !{!362, !17, !18}
!363 = distinct !{!363, !30, !17, !18}
!364 = distinct !{!364, !17, !18}
!365 = distinct !{!365, !30, !17, !18}
!366 = distinct !{!366, !17, !18}
!367 = distinct !{!367, !40}
!368 = distinct !{!368, !17, !18}
!369 = distinct !{!369, !17, !18}
!370 = distinct !{!370, !40}
!371 = distinct !{!371, !17, !18}
!372 = distinct !{!372, !17, !18}
!373 = distinct !{!373, !30, !17, !18}
!374 = distinct !{!374, !17, !18}
!375 = distinct !{!375, !40}
!376 = distinct !{!376, !17, !18}
!377 = distinct !{!377, !17, !18}
!378 = distinct !{!378, !17, !18}
!379 = distinct !{!379, !17, !18}
!380 = distinct !{!380, !30, !17, !18}
!381 = distinct !{!381, !17, !18}
!382 = distinct !{!382, !30, !17, !18}
!383 = distinct !{!383, !17, !18}
!384 = distinct !{!384, !30, !17, !18}
!385 = distinct !{!385, !17, !18}
!386 = distinct !{!386, !30, !17, !18}
!387 = distinct !{!387, !17, !18}
!388 = distinct !{!388, !30, !17, !18}
!389 = distinct !{!389, !17, !18}
!390 = distinct !{!390, !30, !17, !18}
!391 = distinct !{!391, !17, !18}
!392 = distinct !{!392, !30, !17, !18}
!393 = distinct !{!393, !17, !18}
!394 = distinct !{!394, !30, !17, !18}
!395 = distinct !{!395, !40}
!396 = distinct !{!396, !397, !"polly.alias.scope.first"}
!397 = distinct !{!397, !"polly.alias.scope.domain"}
!398 = !{!399, !400, !401, !402}
!399 = distinct !{!399, !397, !"polly.alias.scope.result.09.reload.s2a"}
!400 = distinct !{!400, !397, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!401 = distinct !{!401, !397, !"polly.alias.scope.result.09.reg2mem"}
!402 = distinct !{!402, !397, !"polly.alias.scope..s2a"}
!403 = distinct !{!403, !40}
!404 = distinct !{!404, !40}
!405 = distinct !{!405, !40}
!406 = distinct !{!406, !40}
!407 = distinct !{!407, !40}
!408 = distinct !{!408, !40}
!409 = distinct !{!409, !40}
!410 = distinct !{!410, !40}
!411 = distinct !{!411, !412, !"polly.alias.scope.first"}
!412 = distinct !{!412, !"polly.alias.scope.domain"}
!413 = !{!414, !415, !416, !417}
!414 = distinct !{!414, !412, !"polly.alias.scope..s2a"}
!415 = distinct !{!415, !412, !"polly.alias.scope.result.09.reload.s2a"}
!416 = distinct !{!416, !412, !"polly.alias.scope.result.09.reg2mem"}
!417 = distinct !{!417, !412, !"polly.alias.scope.result.0.lcssa.reg2mem"}
!418 = distinct !{!418, !40}
!419 = distinct !{!419, !40}
!420 = distinct !{!420, !40}
!421 = distinct !{!421, !40}
!422 = distinct !{!422, !40}
!423 = distinct !{!423, !40}
!424 = distinct !{!424, !40}


More information about the llvm-commits mailing list