[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