; ModuleID = '/home/user/anydsl/stincilla/build/halide/./blur' source_filename = "/home/user/anydsl/stincilla/build/halide/./blur" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @total_cpu_timing_587696 = internal unnamed_addr global i64 0 @_593775 = internal constant [9 x i8] c"Timing: \00" @_593795 = internal constant [4 x i8] c" | \00" @_593807 = internal constant [4 x i8] c" | \00" @_593825 = internal constant [10 x i8] c" (median(\00" @_593842 = internal constant [27 x i8] c") | minimum | maximum) ms\0A\00" @_593864 = internal constant [32 x i8] c"Total timing for cpu / kernel: \00" @_593876 = internal constant [4 x i8] c" / \00" @_593889 = internal constant [5 x i8] c" ms\0A\00" define void @run_halide([0 x i32]* %data_587678, i32 %width_587679, i32 %height_587680) local_unnamed_addr #0 { run_halide: %parallel_closure63 = alloca { [0 x i32]*, i32, [0 x i8]*, i32 }, align 8 %parallel_closure62 = alloca { i32, [0 x i8]*, i32, [0 x i32]* }, align 8 %parallel_closure61 = alloca { [0 x i32]*, [0 x i8]*, i32, i32 }, align 8 %parallel_closure60 = alloca { [0 x i8]*, [0 x i32]*, i32, i32 }, align 8 %parallel_closure59 = alloca { i32, [0 x i8]*, [0 x i32]* }, align 8 %parallel_closure58 = alloca { [0 x i32]*, i32, i32, [0 x i8]* }, align 8 %parallel_closure57 = alloca { i32, [0 x i8]*, [0 x i32]*, i32 }, align 8 %parallel_closure56 = alloca { [0 x i8]*, i32, i32, [0 x i32]* }, align 8 %parallel_closure = alloca { [0 x i32]*, [0 x i8]*, i32, i32 }, align 8 %j_593707 = alloca i32, align 4 %0 = mul nsw i32 %width_587679, %height_587680 %1 = sext i32 %0 to i64 %2 = shl nsw i64 %1, 2 %3 = call [0 x i8]* @anydsl_alloc(i32 0, i64 %2) %4 = load i64, i64* @total_cpu_timing_587696, align 8 %5 = call [0 x i8]* @anydsl_alloc(i32 0, i64 16000) %6 = bitcast [0 x i8]* %5 to [0 x i64]* %7 = add nsw i32 %height_587680, -1 %8 = sdiv i32 %7, 32 %9 = shl nsw i32 %8, 5 %10 = add nsw i32 %9, -32 %11 = sdiv i32 %10, 32 %12 = sub nsw i32 %height_587680, %9 %13 = sdiv i32 %12, 32 %parallel_closure.repack = getelementptr inbounds { [0 x i32]*, [0 x i8]*, i32, i32 }, { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure, i64 0, i32 0 %parallel_closure.repack68 = getelementptr inbounds { [0 x i32]*, [0 x i8]*, i32, i32 }, { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure, i64 0, i32 1 %parallel_closure.repack70 = getelementptr inbounds { [0 x i32]*, [0 x i8]*, i32, i32 }, { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure, i64 0, i32 2 %parallel_closure.repack72 = getelementptr inbounds { [0 x i32]*, [0 x i8]*, i32, i32 }, { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure, i64 0, i32 3 %14 = bitcast { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure to i8* %parallel_closure56.repack = getelementptr inbounds { [0 x i8]*, i32, i32, [0 x i32]* }, { [0 x i8]*, i32, i32, [0 x i32]* }* %parallel_closure56, i64 0, i32 0 %parallel_closure56.repack74 = getelementptr inbounds { [0 x i8]*, i32, i32, [0 x i32]* }, { [0 x i8]*, i32, i32, [0 x i32]* }* %parallel_closure56, i64 0, i32 1 %parallel_closure56.repack76 = getelementptr inbounds { [0 x i8]*, i32, i32, [0 x i32]* }, { [0 x i8]*, i32, i32, [0 x i32]* }* %parallel_closure56, i64 0, i32 2 %parallel_closure56.repack78 = getelementptr inbounds { [0 x i8]*, i32, i32, [0 x i32]* }, { [0 x i8]*, i32, i32, [0 x i32]* }* %parallel_closure56, i64 0, i32 3 %15 = bitcast { [0 x i8]*, i32, i32, [0 x i32]* }* %parallel_closure56 to i8* %16 = insertvalue { i32, [0 x i8]*, [0 x i32]*, i32 } undef, i32 %height_587680, 0 %17 = insertvalue { i32, [0 x i8]*, [0 x i32]*, i32 } %16, [0 x i8]* %3, 1 %18 = insertvalue { i32, [0 x i8]*, [0 x i32]*, i32 } %17, [0 x i32]* %data_587678, 2 %19 = insertvalue { i32, [0 x i8]*, [0 x i32]*, i32 } %18, i32 %width_587679, 3 %20 = bitcast { i32, [0 x i8]*, [0 x i32]*, i32 }* %parallel_closure57 to i8* %parallel_closure58.repack = getelementptr inbounds { [0 x i32]*, i32, i32, [0 x i8]* }, { [0 x i32]*, i32, i32, [0 x i8]* }* %parallel_closure58, i64 0, i32 0 %parallel_closure58.repack80 = getelementptr inbounds { [0 x i32]*, i32, i32, [0 x i8]* }, { [0 x i32]*, i32, i32, [0 x i8]* }* %parallel_closure58, i64 0, i32 1 %parallel_closure58.repack82 = getelementptr inbounds { [0 x i32]*, i32, i32, [0 x i8]* }, { [0 x i32]*, i32, i32, [0 x i8]* }* %parallel_closure58, i64 0, i32 2 %parallel_closure58.repack84 = getelementptr inbounds { [0 x i32]*, i32, i32, [0 x i8]* }, { [0 x i32]*, i32, i32, [0 x i8]* }* %parallel_closure58, i64 0, i32 3 %21 = bitcast { [0 x i32]*, i32, i32, [0 x i8]* }* %parallel_closure58 to i8* %22 = insertvalue { i32, [0 x i8]*, [0 x i32]* } undef, i32 %width_587679, 0 %23 = insertvalue { i32, [0 x i8]*, [0 x i32]* } %22, [0 x i8]* %3, 1 %24 = insertvalue { i32, [0 x i8]*, [0 x i32]* } %23, [0 x i32]* %data_587678, 2 %25 = bitcast { i32, [0 x i8]*, [0 x i32]* }* %parallel_closure59 to i8* %parallel_closure60.repack = getelementptr inbounds { [0 x i8]*, [0 x i32]*, i32, i32 }, { [0 x i8]*, [0 x i32]*, i32, i32 }* %parallel_closure60, i64 0, i32 0 %parallel_closure60.repack86 = getelementptr inbounds { [0 x i8]*, [0 x i32]*, i32, i32 }, { [0 x i8]*, [0 x i32]*, i32, i32 }* %parallel_closure60, i64 0, i32 1 %parallel_closure60.repack88 = getelementptr inbounds { [0 x i8]*, [0 x i32]*, i32, i32 }, { [0 x i8]*, [0 x i32]*, i32, i32 }* %parallel_closure60, i64 0, i32 2 %parallel_closure60.repack90 = getelementptr inbounds { [0 x i8]*, [0 x i32]*, i32, i32 }, { [0 x i8]*, [0 x i32]*, i32, i32 }* %parallel_closure60, i64 0, i32 3 %26 = bitcast { [0 x i8]*, [0 x i32]*, i32, i32 }* %parallel_closure60 to i8* %parallel_closure61.repack = getelementptr inbounds { [0 x i32]*, [0 x i8]*, i32, i32 }, { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure61, i64 0, i32 0 %parallel_closure61.repack92 = getelementptr inbounds { [0 x i32]*, [0 x i8]*, i32, i32 }, { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure61, i64 0, i32 1 %parallel_closure61.repack94 = getelementptr inbounds { [0 x i32]*, [0 x i8]*, i32, i32 }, { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure61, i64 0, i32 2 %parallel_closure61.repack96 = getelementptr inbounds { [0 x i32]*, [0 x i8]*, i32, i32 }, { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure61, i64 0, i32 3 %27 = bitcast { [0 x i32]*, [0 x i8]*, i32, i32 }* %parallel_closure61 to i8* %28 = insertvalue { i32, [0 x i8]*, i32, [0 x i32]* } undef, i32 %height_587680, 0 %29 = insertvalue { i32, [0 x i8]*, i32, [0 x i32]* } %28, [0 x i8]* %3, 1 %30 = insertvalue { i32, [0 x i8]*, i32, [0 x i32]* } %29, i32 %width_587679, 2 %31 = insertvalue { i32, [0 x i8]*, i32, [0 x i32]* } %30, [0 x i32]* %data_587678, 3 %32 = bitcast { i32, [0 x i8]*, i32, [0 x i32]* }* %parallel_closure62 to i8* %33 = insertvalue { [0 x i32]*, i32, [0 x i8]*, i32 } undef, [0 x i32]* %data_587678, 0 %34 = insertvalue { [0 x i32]*, i32, [0 x i8]*, i32 } %33, i32 %height_587680, 1 %35 = insertvalue { [0 x i32]*, i32, [0 x i8]*, i32 } %34, [0 x i8]* %3, 2 %36 = insertvalue { [0 x i32]*, i32, [0 x i8]*, i32 } %35, i32 %width_587679, 3 %37 = bitcast { [0 x i32]*, i32, [0 x i8]*, i32 }* %parallel_closure63 to i8* br label %branch_true42 branch_false11: ; preds = %while_exit store i32 %80, i32* %j_593707, align 4 call void @anydsl_print_string([0 x i8]* bitcast ([9 x i8]* @_593775 to [0 x i8]*)) %38 = getelementptr inbounds [0 x i8], [0 x i8]* %5, i64 0, i64 8000 %39 = bitcast i8* %38 to i64* %40 = load i64, i64* %39, align 8 %41 = sitofp i64 %40 to double %42 = fdiv double %41, 1.000000e+03 call void @anydsl_print_f64(double %42) call void @anydsl_print_string([0 x i8]* bitcast ([4 x i8]* @_593795 to [0 x i8]*)) %43 = bitcast [0 x i8]* %5 to i64* %44 = load i64, i64* %43, align 8 %45 = sitofp i64 %44 to double %46 = fdiv double %45, 1.000000e+03 call void @anydsl_print_f64(double %46) call void @anydsl_print_string([0 x i8]* bitcast ([4 x i8]* @_593807 to [0 x i8]*)) %47 = getelementptr inbounds [0 x i8], [0 x i8]* %5, i64 0, i64 15992 %48 = bitcast i8* %47 to i64* %49 = load i64, i64* %48, align 8 %50 = sitofp i64 %49 to double %51 = fdiv double %50, 1.000000e+03 call void @anydsl_print_f64(double %51) call void @anydsl_print_string([0 x i8]* bitcast ([10 x i8]* @_593825 to [0 x i8]*)) call void @anydsl_print_i32(i32 2000) call void @anydsl_print_string([0 x i8]* bitcast ([27 x i8]* @_593842 to [0 x i8]*)) %52 = load i64, i64* %39, align 8 call void @anydsl_release(i32 0, [0 x i8]* %5) %53 = add nsw i64 %4, %52 store i64 %53, i64* @total_cpu_timing_587696, align 8 call void @anydsl_print_string([0 x i8]* bitcast ([32 x i8]* @_593864 to [0 x i8]*)) %54 = load i64, i64* @total_cpu_timing_587696, align 8 %55 = sitofp i64 %54 to double %56 = fdiv double %55, 1.000000e+03 call void @anydsl_print_f64(double %56) call void @anydsl_print_string([0 x i8]* bitcast ([4 x i8]* @_593876 to [0 x i8]*)) call void @anydsl_print_f64(double 0.000000e+00) call void @anydsl_print_string([0 x i8]* bitcast ([5 x i8]* @_593889 to [0 x i8]*)) %57 = bitcast [0 x i8]* %3 to [0 x i32]* %58 = icmp sgt i32 %height_587680, 0 br i1 %58, label %branch_true.preheader, label %branch_false31 branch_true.preheader: ; preds = %branch_false11 %59 = icmp sgt i32 %width_587679, 0 br label %branch_true branch_false31: ; preds = %branch_false36, %branch_false11 call void @anydsl_release(i32 0, [0 x i8]* %3) ret void branch_true: ; preds = %branch_true.preheader, %branch_false36 %loop2867 = phi i32 [ %61, %branch_false36 ], [ 0, %branch_true.preheader ] %60 = mul nsw i32 %loop2867, %width_587679 br i1 %59, label %branch_true37, label %branch_false36 branch_false36: ; preds = %branch_true37, %branch_true %61 = add nuw nsw i32 %loop2867, 1 %62 = icmp slt i32 %61, %height_587680 br i1 %62, label %branch_true, label %branch_false31 branch_true37: ; preds = %branch_true, %branch_true37 %loop3366 = phi i32 [ %69, %branch_true37 ], [ 0, %branch_true ] %63 = add nsw i32 %60, %loop3366 %64 = sext i32 %63 to i64 %65 = getelementptr inbounds [0 x i32], [0 x i32]* %57, i64 0, i64 %64 %66 = load i32, i32* %65, align 4 %67 = sext i32 %63 to i64 %68 = getelementptr inbounds [0 x i32], [0 x i32]* %data_587678, i64 0, i64 %67 store i32 %66, i32* %68, align 4 %69 = add nuw nsw i32 %loop3366, 1 %70 = icmp slt i32 %69, %width_587679 br i1 %70, label %branch_true37, label %branch_false36 branch_true38: ; preds = %branch_true42, %while_exit %loop865 = phi i32 [ %83, %while_exit ], [ 1, %branch_true42 ] %71 = zext i32 %loop865 to i64 %72 = getelementptr inbounds [0 x i64], [0 x i64]* %6, i64 0, i64 %71 %73 = load i64, i64* %72, align 8 br label %and_true and_true: ; preds = %branch_true38, %branch_true41 %74 = phi i32 [ %loop865, %branch_true38 ], [ %91, %branch_true41 ] %75 = add nsw i32 %74, -1 %76 = sext i32 %75 to i64 %77 = getelementptr inbounds [0 x i64], [0 x i64]* %6, i64 0, i64 %76 %78 = load i64, i64* %77, align 8 %79 = icmp slt i64 %73, %78 br i1 %79, label %branch_true41, label %while_exit while_exit: ; preds = %and_true, %branch_true41 %80 = phi i32 [ %74, %and_true ], [ %91, %branch_true41 ] %81 = sext i32 %80 to i64 %82 = getelementptr inbounds [0 x i64], [0 x i64]* %6, i64 0, i64 %81 store i64 %73, i64* %82, align 8 %83 = add nuw nsw i32 %loop865, 1 %84 = icmp ult i32 %loop865, 1999 br i1 %84, label %branch_true38, label %branch_false11 branch_true41: ; preds = %and_true %85 = add nsw i32 %74, -1 %86 = sext i32 %85 to i64 %87 = getelementptr inbounds [0 x i64], [0 x i64]* %6, i64 0, i64 %86 %88 = load i64, i64* %87, align 8 %89 = sext i32 %74 to i64 %90 = getelementptr inbounds [0 x i64], [0 x i64]* %6, i64 0, i64 %89 store i64 %88, i64* %90, align 8 %91 = add nsw i32 %74, -1 %92 = icmp sgt i32 %74, 1 br i1 %92, label %and_true, label %while_exit branch_true42: ; preds = %run_halide, %branch_true42 %loop464 = phi i32 [ 0, %run_halide ], [ %98, %branch_true42 ] %93 = call i64 @anydsl_get_micro_time() store [0 x i32]* %data_587678, [0 x i32]** %parallel_closure.repack, align 8 store [0 x i8]* %3, [0 x i8]** %parallel_closure.repack68, align 8 store i32 %height_587680, i32* %parallel_closure.repack70, align 8 store i32 %width_587679, i32* %parallel_closure.repack72, align 4 call void @anydsl_parallel_for(i32 0, i32 0, i32 1, i8* nonnull %14, i8* bitcast (void (i8*, i32, i32)* @for_body_587729_parallel_for to i8*)) store [0 x i8]* %3, [0 x i8]** %parallel_closure56.repack, align 8 store i32 %height_587680, i32* %parallel_closure56.repack74, align 8 store i32 %width_587679, i32* %parallel_closure56.repack76, align 4 store [0 x i32]* %data_587678, [0 x i32]** %parallel_closure56.repack78, align 8 call void @anydsl_parallel_for(i32 0, i32 0, i32 1, i8* nonnull %15, i8* bitcast (void (i8*, i32, i32)* @for_body_588451_parallel_for to i8*)) store { i32, [0 x i8]*, [0 x i32]*, i32 } %19, { i32, [0 x i8]*, [0 x i32]*, i32 }* %parallel_closure57, align 8 call void @anydsl_parallel_for(i32 0, i32 0, i32 1, i8* nonnull %20, i8* bitcast (void (i8*, i32, i32)* @for_body_589133_parallel_for to i8*)) store [0 x i32]* %data_587678, [0 x i32]** %parallel_closure58.repack, align 8 store i32 %height_587680, i32* %parallel_closure58.repack80, align 8 store i32 %width_587679, i32* %parallel_closure58.repack82, align 4 store [0 x i8]* %3, [0 x i8]** %parallel_closure58.repack84, align 8 call void @anydsl_parallel_for(i32 0, i32 0, i32 %11, i8* nonnull %21, i8* bitcast (void (i8*, i32, i32)* @for_body_589856_parallel_for to i8*)) store { i32, [0 x i8]*, [0 x i32]* } %24, { i32, [0 x i8]*, [0 x i32]* }* %parallel_closure59, align 8 call void @anydsl_parallel_for(i32 0, i32 0, i32 %11, i8* nonnull %25, i8* bitcast (void (i8*, i32, i32)* @for_body_590527_parallel_for to i8*)) store [0 x i8]* %3, [0 x i8]** %parallel_closure60.repack, align 8 store [0 x i32]* %data_587678, [0 x i32]** %parallel_closure60.repack86, align 8 store i32 %width_587679, i32* %parallel_closure60.repack88, align 8 store i32 %height_587680, i32* %parallel_closure60.repack90, align 4 call void @anydsl_parallel_for(i32 0, i32 0, i32 %11, i8* nonnull %26, i8* bitcast (void (i8*, i32, i32)* @for_body_590855_parallel_for to i8*)) store [0 x i32]* %data_587678, [0 x i32]** %parallel_closure61.repack, align 8 store [0 x i8]* %3, [0 x i8]** %parallel_closure61.repack92, align 8 store i32 %height_587680, i32* %parallel_closure61.repack94, align 8 store i32 %width_587679, i32* %parallel_closure61.repack96, align 4 call void @anydsl_parallel_for(i32 0, i32 0, i32 %13, i8* nonnull %27, i8* bitcast (void (i8*, i32, i32)* @for_body_591541_parallel_for to i8*)) store { i32, [0 x i8]*, i32, [0 x i32]* } %31, { i32, [0 x i8]*, i32, [0 x i32]* }* %parallel_closure62, align 8 call void @anydsl_parallel_for(i32 0, i32 0, i32 %13, i8* nonnull %32, i8* bitcast (void (i8*, i32, i32)* @for_body_592259_parallel_for to i8*)) store { [0 x i32]*, i32, [0 x i8]*, i32 } %36, { [0 x i32]*, i32, [0 x i8]*, i32 }* %parallel_closure63, align 8 call void @anydsl_parallel_for(i32 0, i32 0, i32 %13, i8* nonnull %37, i8* bitcast (void (i8*, i32, i32)* @for_body_592953_parallel_for to i8*)) %94 = call i64 @anydsl_get_micro_time() %95 = zext i32 %loop464 to i64 %96 = getelementptr inbounds [0 x i64], [0 x i64]* %6, i64 0, i64 %95 %97 = sub nsw i64 %94, %93 store i64 %97, i64* %96, align 8 %98 = add nuw nsw i32 %loop464, 1 %99 = icmp ult i32 %loop464, 1999 br i1 %99, label %branch_true42, label %branch_true38 } declare [0 x i8]* @anydsl_alloc(i32, i64) local_unnamed_addr #0 declare void @anydsl_print_string([0 x i8]*) local_unnamed_addr #0 declare void @anydsl_print_f64(double) local_unnamed_addr #0 declare void @anydsl_print_i32(i32) local_unnamed_addr #0 declare void @anydsl_release(i32, [0 x i8]*) local_unnamed_addr #0 declare i64 @anydsl_get_micro_time() local_unnamed_addr #0 define void @for_body_587729_parallel_for(i8* %0, i32 %1, i32 %2) #0 { for_body_587729_parallel_for: %.elt = bitcast i8* %0 to [0 x i32]** %.unpack = load [0 x i32]*, [0 x i32]** %.elt, align 8 %.elt9 = getelementptr inbounds i8, i8* %0, i64 8 %3 = bitcast i8* %.elt9 to [0 x i32]** %.unpack1015 = load [0 x i32]*, [0 x i32]** %3, align 8 %.elt11 = getelementptr inbounds i8, i8* %0, i64 16 %4 = bitcast i8* %.elt11 to i32* %.unpack12 = load i32, i32* %4, align 8 %.elt13 = getelementptr inbounds i8, i8* %0, i64 20 %5 = bitcast i8* %.elt13 to i32* %.unpack14 = load i32, i32* %5, align 4 %6 = icmp slt i32 %1, %2 br i1 %6, label %branch_true.i.preheader, label %exit branch_true.i.preheader: ; preds = %for_body_587729_parallel_for %7 = add nsw i32 %.unpack14, -1 %8 = add nsw i32 %.unpack12, -1 %.splatinsert3.i.i = insertelement <8 x i32> poison, i32 %7, i64 0 %.splat4.i.i = shufflevector <8 x i32> %.splatinsert3.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %9 = bitcast [0 x i32]* %.unpack to i8* %10 = bitcast [0 x i32]* %.unpack to i8* %11 = bitcast [0 x i32]* %.unpack to i8* br label %branch_true.i branch_true.i: ; preds = %branch_true.i.preheader, %branch_false14.i %parallel_loop_phi8 = phi i32 [ %17, %branch_false14.i ], [ %1, %branch_true.i.preheader ] %12 = call [0 x i8]* @anydsl_alloc(i32 0, i64 34816) %13 = shl nsw i32 %parallel_loop_phi8, 5 %14 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> , <8 x float> , <8 x float> ) %15 = bitcast <8 x float> %14 to <8 x i32> %16 = bitcast [0 x i8]* %12 to [0 x i32]* br label %branch_true30.i branch_false14.i: ; preds = %branch_false26.i call void @anydsl_release(i32 0, [0 x i8]* %12) %17 = add i32 %parallel_loop_phi8, 1 %18 = icmp slt i32 %17, %2 br i1 %18, label %branch_true.i, label %exit branch_true16.i: ; preds = %branch_true16.i.preheader, %branch_false26.i %loop11.i6 = phi i32 [ %26, %branch_false26.i ], [ 0, %branch_true16.i.preheader ] %19 = shl nsw i32 %loop11.i6, 8 %20 = shl i32 %loop11.i6, 8 %21 = add i32 %20, 256 %22 = shl i32 %loop11.i6, 8 %23 = add i32 %22, 512 %24 = add nsw i32 %68, %loop11.i6 %25 = mul nsw i32 %24, %.unpack14 br label %branch_true28.i branch_false26.i: ; preds = %branch_true28.i %26 = add nuw nsw i32 %loop11.i6, 1 %27 = icmp ult i32 %loop11.i6, 31 br i1 %27, label %branch_true16.i, label %branch_false14.i branch_true28.i: ; preds = %branch_true16.i, %branch_true28.i %loop18.i4 = phi i32 [ 0, %branch_true16.i ], [ %43, %branch_true28.i ] %28 = add nuw nsw i32 %19, %loop18.i4 %29 = zext i32 %28 to i64 %30 = getelementptr inbounds [0 x i32], [0 x i32]* %67, i64 0, i64 %29 %vec_cast.i.i = bitcast i32* %30 to <8 x i32>* %cont_load.i.i = load <8 x i32>, <8 x i32>* %vec_cast.i.i, align 4 %31 = add nsw i32 %21, %loop18.i4 %32 = sext i32 %31 to i64 %33 = getelementptr inbounds [0 x i32], [0 x i32]* %67, i64 0, i64 %32 %vec_cast1.i.i = bitcast i32* %33 to <8 x i32>* %cont_load2.i.i = load <8 x i32>, <8 x i32>* %vec_cast1.i.i, align 4 %34 = add nsw i32 %23, %loop18.i4 %35 = sext i32 %34 to i64 %36 = getelementptr inbounds [0 x i32], [0 x i32]* %67, i64 0, i64 %35 %vec_cast3.i.i = bitcast i32* %36 to <8 x i32>* %cont_load4.i.i = load <8 x i32>, <8 x i32>* %vec_cast3.i.i, align 4 %37 = add nsw i32 %25, %loop18.i4 %38 = add nsw <8 x i32> %cont_load.i.i, %cont_load2.i.i %39 = add nsw <8 x i32> %38, %cont_load4.i.i %40 = sdiv <8 x i32> %39, %41 = sext i32 %37 to i64 %42 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack1015, i64 0, i64 %41 %vec_cast5.i.i = bitcast i32* %42 to <8 x i32>* store <8 x i32> %40, <8 x i32>* %vec_cast5.i.i, align 4 %43 = add nuw nsw i32 %loop18.i4, 8 %44 = icmp ult i32 %loop18.i4, 248 br i1 %44, label %branch_true28.i, label %branch_false26.i branch_true30.i: ; preds = %branch_true.i, %branch_false40.i %loop6.i3 = phi i32 [ -1, %branch_true.i ], [ %65, %branch_false40.i ] %45 = add nsw i32 %13, %loop6.i3 %.lobit = ashr i32 %45, 31 %.lobit.not = xor i32 %.lobit, -1 %46 = insertelement <8 x i32> poison, i32 %.lobit.not, i64 0 %47 = shufflevector <8 x i32> %46, <8 x i32> poison, <8 x i32> zeroinitializer %48 = icmp sgt i32 %45, 0 %49 = mul nsw i32 %45, %.unpack14 %cont14.i.i = select i1 %48, i32 %45, i32 0 %50 = icmp slt i32 %cont14.i.i, %8 %cont18.i.i = select i1 %50, i32 %cont14.i.i, i32 %8 %51 = mul nsw i32 %cont18.i.i, %.unpack14 %.splatinsert5.i.i = insertelement <8 x i32> poison, i32 %51, i64 0 %.splat6.i.i = shufflevector <8 x i32> %.splatinsert5.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %.lobit16 = ashr i32 %45, 31 %52 = insertelement <8 x i32> poison, i32 %.lobit16, i64 0 %53 = shufflevector <8 x i32> %52, <8 x i32> poison, <8 x i32> zeroinitializer %54 = icmp ne <8 x i32> %53, %cont41.i.i = select i1 %48, i32 %45, i32 0 %55 = icmp slt i32 %cont41.i.i, %8 %cont45.i.i = select i1 %55, i32 %cont41.i.i, i32 %8 %56 = mul nsw i32 %cont45.i.i, %.unpack14 %.splatinsert14.i.i = insertelement <8 x i32> poison, i32 %56, i64 0 %.splat15.i.i = shufflevector <8 x i32> %.splatinsert14.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %57 = icmp ne <8 x i32> %53, zeroinitializer %58 = sext <8 x i1> %57 to <8 x i32> %59 = bitcast <8 x i32> %58 to <8 x float> %60 = bitcast <8 x i32> %53 to <8 x float> %cont68.i.i = select i1 %48, i32 %45, i32 0 %61 = icmp slt i32 %cont68.i.i, %8 %cont72.i.i = select i1 %61, i32 %cont68.i.i, i32 %8 %62 = mul nsw i32 %cont72.i.i, %.unpack14 %.splatinsert21.i.i = insertelement <8 x i32> poison, i32 %62, i64 0 %.splat22.i.i = shufflevector <8 x i32> %.splatinsert21.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %63 = shl i32 %loop6.i3, 8 %64 = add i32 %63, 256 br label %branch_true120.i branch_false40.i: ; preds = %branch_true120.i %65 = add nsw i32 %loop6.i3, 1 %66 = icmp slt i32 %loop6.i3, 32 br i1 %66, label %branch_true30.i, label %branch_true16.i.preheader branch_true16.i.preheader: ; preds = %branch_false40.i %67 = bitcast [0 x i8]* %12 to [0 x i32]* %68 = shl nsw i32 %parallel_loop_phi8, 5 br label %branch_true16.i branch_true120.i: ; preds = %branch_true30.i, %branch_true120.i %loop32.i1 = phi i32 [ 0, %branch_true30.i ], [ %128, %branch_true120.i ] %69 = add nsw i32 %loop32.i1, -1 %.splatinsert.i.i = insertelement <8 x i32> poison, i32 %69, i64 0 %.splat.i.i = shufflevector <8 x i32> %.splatinsert.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add.i.i = add <8 x i32> %.splat.i.i, %isneg = icmp slt <8 x i32> %contiguous_add.i.i, zeroinitializer %70 = select <8 x i1> %isneg, <8 x i32> zeroinitializer, <8 x i32> %47 %71 = xor <8 x i32> %70, %72 = icmp sgt <8 x i32> %contiguous_add.i.i, zeroinitializer %73 = select <8 x i1> %72, <8 x i32> %contiguous_add.i.i, <8 x i32> zeroinitializer %74 = icmp slt <8 x i32> %73, %.splat4.i.i %75 = select <8 x i1> %74, <8 x i32> %73, <8 x i32> %.splat4.i.i %76 = add nsw <8 x i32> %.splat6.i.i, %75 %77 = icmp ne <8 x i32> %70, %78 = sext <8 x i1> %77 to <8 x i32> %79 = bitcast <8 x i32> %78 to <8 x float> %80 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %9, <8 x i32> %76, <8 x float> %79, i8 4) %81 = add nsw i32 %49, %69 %82 = sext i32 %81 to i64 %83 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %82 %vec_cast.i122.i = bitcast i32* %83 to <8 x i32>* %84 = icmp ne <8 x i32> %70, zeroinitializer %85 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast.i122.i, i32 4, <8 x i1> %84, <8 x i32> undef) %86 = bitcast <8 x i32> %85 to <8 x float> %87 = bitcast <8 x i32> %71 to <8 x float> %88 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %86, <8 x float> %80, <8 x float> %87) %89 = bitcast <8 x float> %88 to <8 x i32> %.splatinsert7.i.i = insertelement <8 x i32> poison, i32 %loop32.i1, i64 0 %.splat8.i.i = shufflevector <8 x i32> %.splatinsert7.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add9.i.i = or <8 x i32> %.splat8.i.i, %90 = add nsw i32 %49, %loop32.i1 %91 = sext i32 %90 to i64 %92 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %91 %vec_cast12.i.i = bitcast i32* %92 to <8 x i32>* %93 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast12.i.i, i32 4, <8 x i1> %54, <8 x i32> undef) %.not = icmp eq <8 x i32> %contiguous_add9.i.i, zeroinitializer %94 = select <8 x i1> %.not, <8 x i32> zeroinitializer, <8 x i32> %contiguous_add9.i.i %95 = icmp slt <8 x i32> %94, %.splat4.i.i %96 = select <8 x i1> %95, <8 x i32> %94, <8 x i32> %.splat4.i.i %97 = add nsw <8 x i32> %.splat15.i.i, %96 %98 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %10, <8 x i32> %97, <8 x float> %59, i8 4) %99 = bitcast <8 x i32> %93 to <8 x float> %100 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %99, <8 x float> %98, <8 x float> %60) %101 = bitcast <8 x float> %100 to <8 x i32> %102 = or i32 %loop32.i1, 1 %.splatinsert16.i.i = insertelement <8 x i32> poison, i32 %102, i64 0 %.splat17.i.i = shufflevector <8 x i32> %.splatinsert16.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add18.i.i = add nuw <8 x i32> %.splat17.i.i, %contiguous_add18.i.i.lobit = ashr <8 x i32> %contiguous_add18.i.i, %103 = or <8 x i32> %contiguous_add18.i.i.lobit, %53 %104 = add nsw i32 %49, %102 %105 = sext i32 %104 to i64 %106 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %105 %vec_cast19.i.i = bitcast i32* %106 to <8 x i32>* %107 = icmp ne <8 x i32> %103, %108 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast19.i.i, i32 4, <8 x i1> %107, <8 x i32> undef) %109 = icmp sgt <8 x i32> %contiguous_add18.i.i, zeroinitializer %110 = select <8 x i1> %109, <8 x i32> %contiguous_add18.i.i, <8 x i32> zeroinitializer %111 = icmp slt <8 x i32> %110, %.splat4.i.i %112 = select <8 x i1> %111, <8 x i32> %110, <8 x i32> %.splat4.i.i %113 = add nsw <8 x i32> %.splat22.i.i, %112 %114 = icmp ne <8 x i32> %103, zeroinitializer %115 = sext <8 x i1> %114 to <8 x i32> %116 = bitcast <8 x i32> %115 to <8 x float> %117 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %11, <8 x i32> %113, <8 x float> %116, i8 4) %118 = bitcast <8 x i32> %108 to <8 x float> %119 = bitcast <8 x i32> %103 to <8 x float> %120 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %118, <8 x float> %117, <8 x float> %119) %121 = bitcast <8 x float> %120 to <8 x i32> %122 = add nsw i32 %64, %loop32.i1 %123 = add nsw <8 x i32> %89, %101 %124 = add nsw <8 x i32> %123, %121 %125 = sdiv <8 x i32> %124, %15 %126 = sext i32 %122 to i64 %127 = getelementptr inbounds [0 x i32], [0 x i32]* %16, i64 0, i64 %126 %vec_cast23.i.i = bitcast i32* %127 to <8 x i32>* store <8 x i32> %125, <8 x i32>* %vec_cast23.i.i, align 4 %128 = add nuw nsw i32 %loop32.i1, 8 %129 = icmp ult i32 %loop32.i1, 248 br i1 %129, label %branch_true120.i, label %branch_false40.i exit: ; preds = %branch_false14.i, %for_body_587729_parallel_for ret void } declare void @anydsl_parallel_for(i32, i32, i32, i8*, i8*) local_unnamed_addr #0 define void @for_body_588451_parallel_for(i8* %0, i32 %1, i32 %2) #0 { for_body_588451_parallel_for: %3 = bitcast i8* %0 to [0 x i32]** %.unpack16 = load [0 x i32]*, [0 x i32]** %3, align 8 %.elt10 = getelementptr inbounds i8, i8* %0, i64 8 %4 = bitcast i8* %.elt10 to i32* %.unpack11 = load i32, i32* %4, align 8 %.elt12 = getelementptr inbounds i8, i8* %0, i64 12 %5 = bitcast i8* %.elt12 to i32* %.unpack13 = load i32, i32* %5, align 4 %.elt14 = getelementptr inbounds i8, i8* %0, i64 16 %6 = bitcast i8* %.elt14 to [0 x i32]** %.unpack15 = load [0 x i32]*, [0 x i32]** %6, align 8 %7 = icmp slt i32 %1, %2 br i1 %7, label %body.preheader, label %exit body.preheader: ; preds = %for_body_588451_parallel_for %8 = add nsw i32 %.unpack13, -1 %9 = sdiv i32 %8, 256 %10 = shl nsw i32 %9, 8 %11 = add nsw i32 %10, -256 %12 = sdiv i32 %11, 256 %13 = icmp sgt i32 %.unpack13, 512 %14 = add nsw i32 %.unpack13, -1 %15 = add nsw i32 %.unpack11, -1 %.splatinsert1.i.i = insertelement <8 x i32> poison, i32 %14, i64 0 %.splat2.i.i = shufflevector <8 x i32> %.splatinsert1.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %16 = icmp slt i32 %15, 0 %cont17.i.i = select i1 %16, i32 %15, i32 0 %17 = mul nsw i32 %cont17.i.i, %.unpack13 %.splatinsert3.i.i = insertelement <8 x i32> poison, i32 %17, i64 0 %.splat4.i.i = shufflevector <8 x i32> %.splatinsert3.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %18 = bitcast [0 x i32]* %.unpack15 to i8* %19 = icmp slt i32 %15, 0 %cont41.i.i = select i1 %19, i32 %15, i32 0 %20 = mul nsw i32 %cont41.i.i, %.unpack13 %.splatinsert10.i.i = insertelement <8 x i32> poison, i32 %20, i64 0 %.splat11.i.i = shufflevector <8 x i32> %.splatinsert10.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %21 = bitcast [0 x i32]* %.unpack15 to i8* %22 = icmp slt i32 %15, 0 %cont65.i.i = select i1 %22, i32 %15, i32 0 %23 = mul nsw i32 %cont65.i.i, %.unpack13 %.splatinsert18.i.i = insertelement <8 x i32> poison, i32 %23, i64 0 %.splat19.i.i = shufflevector <8 x i32> %.splatinsert18.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %24 = bitcast [0 x i32]* %.unpack15 to i8* br label %body body: ; preds = %body.preheader, %for_body_588451.exit %parallel_loop_phi8 = phi i32 [ %118, %for_body_588451.exit ], [ %1, %body.preheader ] br i1 %13, label %branch_true.i.preheader, label %for_body_588451.exit branch_true.i.preheader: ; preds = %body %25 = shl nsw i32 %parallel_loop_phi8, 5 %26 = shl nsw i32 %parallel_loop_phi8, 5 br label %branch_true.i branch_true.i: ; preds = %branch_true.i.preheader, %branch_false14.i %loop1.i7 = phi i32 [ %30, %branch_false14.i ], [ 0, %branch_true.i.preheader ] %27 = call [0 x i8]* @anydsl_alloc(i32 0, i64 34816) %28 = shl nsw i32 %loop1.i7, 8 %29 = bitcast [0 x i8]* %27 to [0 x i32]* br label %branch_true30.i branch_false14.i: ; preds = %branch_false26.i call void @anydsl_release(i32 0, [0 x i8]* %27) %30 = add nuw nsw i32 %loop1.i7, 1 %31 = icmp slt i32 %30, %12 br i1 %31, label %branch_true.i, label %for_body_588451.exit branch_true16.i: ; preds = %branch_true16.i.preheader, %branch_false26.i %loop11.i6 = phi i32 [ %39, %branch_false26.i ], [ 0, %branch_true16.i.preheader ] %32 = shl nsw i32 %loop11.i6, 8 %33 = shl i32 %loop11.i6, 8 %34 = add i32 %33, 256 %35 = shl i32 %loop11.i6, 8 %36 = add i32 %35, 512 %37 = add nsw i32 %26, %loop11.i6 %38 = mul nsw i32 %37, %.unpack13 br label %branch_true28.i branch_false26.i: ; preds = %branch_true28.i %39 = add nuw nsw i32 %loop11.i6, 1 %40 = icmp ult i32 %loop11.i6, 31 br i1 %40, label %branch_true16.i, label %branch_false14.i branch_true28.i: ; preds = %branch_true16.i, %branch_true28.i %loop18.i4 = phi i32 [ 0, %branch_true16.i ], [ %58, %branch_true28.i ] %41 = add nuw nsw i32 %32, %loop18.i4 %42 = zext i32 %41 to i64 %43 = getelementptr inbounds [0 x i32], [0 x i32]* %67, i64 0, i64 %42 %vec_cast.i.i = bitcast i32* %43 to <8 x i32>* %cont_load.i.i = load <8 x i32>, <8 x i32>* %vec_cast.i.i, align 4 %44 = add nsw i32 %34, %loop18.i4 %45 = sext i32 %44 to i64 %46 = getelementptr inbounds [0 x i32], [0 x i32]* %67, i64 0, i64 %45 %vec_cast1.i.i = bitcast i32* %46 to <8 x i32>* %cont_load2.i.i = load <8 x i32>, <8 x i32>* %vec_cast1.i.i, align 4 %47 = add nsw i32 %36, %loop18.i4 %48 = sext i32 %47 to i64 %49 = getelementptr inbounds [0 x i32], [0 x i32]* %67, i64 0, i64 %48 %vec_cast3.i.i = bitcast i32* %49 to <8 x i32>* %cont_load4.i.i = load <8 x i32>, <8 x i32>* %vec_cast3.i.i, align 4 %50 = add nuw nsw i32 %68, %loop18.i4 %51 = add nsw i32 %38, %50 %52 = add nsw i32 %51, 256 %53 = add nsw <8 x i32> %cont_load.i.i, %cont_load2.i.i %54 = add nsw <8 x i32> %53, %cont_load4.i.i %55 = sdiv <8 x i32> %54, %56 = sext i32 %52 to i64 %57 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack16, i64 0, i64 %56 %vec_cast5.i.i = bitcast i32* %57 to <8 x i32>* store <8 x i32> %55, <8 x i32>* %vec_cast5.i.i, align 4 %58 = add nuw nsw i32 %loop18.i4, 8 %59 = icmp ult i32 %loop18.i4, 248 br i1 %59, label %branch_true28.i, label %branch_false26.i branch_true30.i: ; preds = %branch_true.i, %branch_false40.i %loop6.i3 = phi i32 [ -1, %branch_true.i ], [ %65, %branch_false40.i ] %60 = add nsw i32 %25, %loop6.i3 %61 = icmp sgt i32 %60, -1 %62 = mul nsw i32 %60, %.unpack13 %63 = shl i32 %loop6.i3, 8 %64 = add i32 %63, 256 br label %branch_true113.i branch_false40.i: ; preds = %_588496_vectorize.exit.i %65 = add nsw i32 %loop6.i3, 1 %66 = icmp slt i32 %loop6.i3, 32 br i1 %66, label %branch_true30.i, label %branch_true16.i.preheader branch_true16.i.preheader: ; preds = %branch_false40.i %67 = bitcast [0 x i8]* %27 to [0 x i32]* %68 = shl nsw i32 %loop1.i7, 8 br label %branch_true16.i branch_true113.i: ; preds = %branch_true30.i, %_588496_vectorize.exit.i %loop32.i1 = phi i32 [ 0, %branch_true30.i ], [ %116, %_588496_vectorize.exit.i ] %69 = add nsw i32 %loop32.i1, -1 %70 = add nsw i32 %28, %69 br i1 %61, label %branch_true18.rv.i.i, label %branch_false2.rv.i.i branch_false2.rv.i.i: ; preds = %branch_true113.i %71 = add nsw i32 %70, 256 %.splatinsert.i.i = insertelement <8 x i32> poison, i32 %71, i64 0 %.splat.i.i = shufflevector <8 x i32> %.splatinsert.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add.i.i = add <8 x i32> %.splat.i.i, %72 = icmp sgt <8 x i32> %contiguous_add.i.i, zeroinitializer %73 = select <8 x i1> %72, <8 x i32> %contiguous_add.i.i, <8 x i32> zeroinitializer %74 = icmp slt <8 x i32> %73, %.splat2.i.i %75 = select <8 x i1> %74, <8 x i32> %73, <8 x i32> %.splat2.i.i %76 = add nsw <8 x i32> %.splat4.i.i, %75 %77 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %18, <8 x i32> %76, <8 x float> , i8 4) %78 = bitcast <8 x float> %77 to <8 x i32> br label %cont19.rv.i.i branch_true18.rv.i.i: ; preds = %branch_true113.i %79 = add nsw i32 %62, %70 %80 = add nsw i32 %79, 256 %81 = sext i32 %80 to i64 %82 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack15, i64 0, i64 %81 %vec_cast.i115.i = bitcast i32* %82 to <8 x i32>* %cont_load.i116.i = load <8 x i32>, <8 x i32>* %vec_cast.i115.i, align 4 br label %cont19.rv.i.i cont19.rv.i.i: ; preds = %branch_true18.rv.i.i, %branch_false2.rv.i.i %cont20_SIMD.i.i = phi <8 x i32> [ %78, %branch_false2.rv.i.i ], [ %cont_load.i116.i, %branch_true18.rv.i.i ] %83 = add nuw nsw i32 %28, %loop32.i1 br i1 %61, label %branch_true42.rv.i.i, label %branch_false25.rv.i.i branch_false25.rv.i.i: ; preds = %cont19.rv.i.i %84 = add nuw nsw i32 %83, 256 %.splatinsert7.i.i = insertelement <8 x i32> poison, i32 %84, i64 0 %.splat8.i.i = shufflevector <8 x i32> %.splatinsert7.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add9.i.i = or <8 x i32> %.splat8.i.i, %85 = icmp sgt <8 x i32> %contiguous_add9.i.i, zeroinitializer %86 = select <8 x i1> %85, <8 x i32> %contiguous_add9.i.i, <8 x i32> zeroinitializer %87 = icmp slt <8 x i32> %86, %.splat2.i.i %88 = select <8 x i1> %87, <8 x i32> %86, <8 x i32> %.splat2.i.i %89 = add nsw <8 x i32> %.splat11.i.i, %88 %90 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %21, <8 x i32> %89, <8 x float> , i8 4) %91 = bitcast <8 x float> %90 to <8 x i32> br label %cont43.rv.i.i branch_true42.rv.i.i: ; preds = %cont19.rv.i.i %92 = add nsw i32 %62, %83 %93 = add nsw i32 %92, 256 %94 = sext i32 %93 to i64 %95 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack15, i64 0, i64 %94 %vec_cast5.i117.i = bitcast i32* %95 to <8 x i32>* %cont_load6.i.i = load <8 x i32>, <8 x i32>* %vec_cast5.i117.i, align 4 br label %cont43.rv.i.i cont43.rv.i.i: ; preds = %branch_true42.rv.i.i, %branch_false25.rv.i.i %cont44_SIMD.i.i = phi <8 x i32> [ %91, %branch_false25.rv.i.i ], [ %cont_load6.i.i, %branch_true42.rv.i.i ] %96 = or i32 %loop32.i1, 1 %97 = add nuw nsw i32 %28, %96 br i1 %61, label %branch_true66.rv.i.i, label %branch_false49.rv.i.i branch_false49.rv.i.i: ; preds = %cont43.rv.i.i %98 = add nuw nsw i32 %97, 256 %.splatinsert15.i.i = insertelement <8 x i32> poison, i32 %98, i64 0 %.splat16.i.i = shufflevector <8 x i32> %.splatinsert15.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add17.i.i = add nuw <8 x i32> %.splat16.i.i, %99 = icmp sgt <8 x i32> %contiguous_add17.i.i, zeroinitializer %100 = select <8 x i1> %99, <8 x i32> %contiguous_add17.i.i, <8 x i32> zeroinitializer %101 = icmp slt <8 x i32> %100, %.splat2.i.i %102 = select <8 x i1> %101, <8 x i32> %100, <8 x i32> %.splat2.i.i %103 = add nsw <8 x i32> %.splat19.i.i, %102 %104 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %24, <8 x i32> %103, <8 x float> , i8 4) %105 = bitcast <8 x float> %104 to <8 x i32> br label %_588496_vectorize.exit.i branch_true66.rv.i.i: ; preds = %cont43.rv.i.i %106 = add nsw i32 %62, %97 %107 = add nsw i32 %106, 256 %108 = sext i32 %107 to i64 %109 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack15, i64 0, i64 %108 %vec_cast12.i.i = bitcast i32* %109 to <8 x i32>* %cont_load13.i.i = load <8 x i32>, <8 x i32>* %vec_cast12.i.i, align 4 br label %_588496_vectorize.exit.i _588496_vectorize.exit.i: ; preds = %branch_true66.rv.i.i, %branch_false49.rv.i.i %cont68_SIMD.i.i = phi <8 x i32> [ %105, %branch_false49.rv.i.i ], [ %cont_load13.i.i, %branch_true66.rv.i.i ] %110 = add nsw i32 %64, %loop32.i1 %111 = add nsw <8 x i32> %cont20_SIMD.i.i, %cont44_SIMD.i.i %112 = add nsw <8 x i32> %111, %cont68_SIMD.i.i %113 = sdiv <8 x i32> %112, %114 = sext i32 %110 to i64 %115 = getelementptr inbounds [0 x i32], [0 x i32]* %29, i64 0, i64 %114 %vec_cast14.i.i = bitcast i32* %115 to <8 x i32>* store <8 x i32> %113, <8 x i32>* %vec_cast14.i.i, align 4 %116 = add nuw nsw i32 %loop32.i1, 8 %117 = icmp ult i32 %loop32.i1, 248 br i1 %117, label %branch_true113.i, label %branch_false40.i for_body_588451.exit: ; preds = %branch_false14.i, %body %118 = add i32 %parallel_loop_phi8, 1 %119 = icmp slt i32 %118, %2 br i1 %119, label %body, label %exit exit: ; preds = %for_body_588451.exit, %for_body_588451_parallel_for ret void } define void @for_body_589133_parallel_for(i8* %0, i32 %1, i32 %2) #0 { for_body_589133_parallel_for: %3 = bitcast i8* %0 to { i32, [0 x i8]*, [0 x i32]*, i32 }* %4 = load { i32, [0 x i8]*, [0 x i32]*, i32 }, { i32, [0 x i8]*, [0 x i32]*, i32 }* %3, align 8 %5 = extractvalue { i32, [0 x i8]*, [0 x i32]*, i32 } %4, 0 %6 = extractvalue { i32, [0 x i8]*, [0 x i32]*, i32 } %4, 1 %7 = extractvalue { i32, [0 x i8]*, [0 x i32]*, i32 } %4, 2 %8 = extractvalue { i32, [0 x i8]*, [0 x i32]*, i32 } %4, 3 %9 = icmp slt i32 %1, %2 br i1 %9, label %body.preheader, label %exit body.preheader: ; preds = %for_body_589133_parallel_for %10 = add nsw i32 %8, -1 %.neg = sdiv i32 %10, -256 %.neg10 = shl i32 %.neg, 8 %11 = add i32 %.neg10, %8 %12 = sdiv i32 %11, 256 %13 = icmp sgt i32 %11, 255 %14 = add nsw i32 %8, -1 %15 = sdiv i32 %14, 256 %.splatinsert1.i.i = insertelement <8 x i32> poison, i32 %8, i64 0 %.splat2.i.i = shufflevector <8 x i32> %.splatinsert1.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %16 = add nsw i32 %5, -1 %.splatinsert5.i.i = insertelement <8 x i32> poison, i32 %14, i64 0 %.splat6.i.i = shufflevector <8 x i32> %.splatinsert5.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %17 = bitcast [0 x i32]* %7 to i8* %18 = bitcast [0 x i32]* %7 to i8* %19 = bitcast [0 x i32]* %7 to i8* %20 = add nsw i32 %8, -1 %21 = sdiv i32 %20, 256 %22 = bitcast [0 x i8]* %6 to [0 x i32]* br label %body body: ; preds = %body.preheader, %for_body_589133.exit %parallel_loop_phi8 = phi i32 [ %152, %for_body_589133.exit ], [ %1, %body.preheader ] br i1 %13, label %branch_true.i.preheader, label %for_body_589133.exit branch_true.i.preheader: ; preds = %body %23 = shl nsw i32 %parallel_loop_phi8, 5 %24 = shl nsw i32 %parallel_loop_phi8, 5 br label %branch_true.i branch_true.i: ; preds = %branch_true.i.preheader, %branch_false14.i %loop1.i7 = phi i32 [ %31, %branch_false14.i ], [ 0, %branch_true.i.preheader ] %25 = call [0 x i8]* @anydsl_alloc(i32 0, i64 34816) %26 = add i32 %15, %loop1.i7 %27 = shl i32 %26, 8 %28 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> , <8 x float> , <8 x float> ) %29 = bitcast <8 x float> %28 to <8 x i32> %30 = bitcast [0 x i8]* %25 to [0 x i32]* br label %branch_true30.i branch_false14.i: ; preds = %branch_false26.i call void @anydsl_release(i32 0, [0 x i8]* %25) %31 = add nuw nsw i32 %loop1.i7, 1 %32 = icmp slt i32 %31, %12 br i1 %32, label %branch_true.i, label %for_body_589133.exit branch_true16.i: ; preds = %branch_true16.i.preheader, %branch_false26.i %loop11.i6 = phi i32 [ %40, %branch_false26.i ], [ 0, %branch_true16.i.preheader ] %33 = shl nsw i32 %loop11.i6, 8 %34 = shl i32 %loop11.i6, 8 %35 = add i32 %34, 256 %36 = shl i32 %loop11.i6, 8 %37 = add i32 %36, 512 %38 = add nsw i32 %24, %loop11.i6 %39 = mul nsw i32 %38, %8 br label %branch_true28.i branch_false26.i: ; preds = %branch_true28.i %40 = add nuw nsw i32 %loop11.i6, 1 %41 = icmp ult i32 %loop11.i6, 31 br i1 %41, label %branch_true16.i, label %branch_false14.i branch_true28.i: ; preds = %branch_true16.i, %branch_true28.i %loop18.i4 = phi i32 [ 0, %branch_true16.i ], [ %58, %branch_true28.i ] %42 = add nuw nsw i32 %33, %loop18.i4 %43 = zext i32 %42 to i64 %44 = getelementptr inbounds [0 x i32], [0 x i32]* %77, i64 0, i64 %43 %vec_cast.i.i = bitcast i32* %44 to <8 x i32>* %cont_load.i.i = load <8 x i32>, <8 x i32>* %vec_cast.i.i, align 4 %45 = add nsw i32 %35, %loop18.i4 %46 = sext i32 %45 to i64 %47 = getelementptr inbounds [0 x i32], [0 x i32]* %77, i64 0, i64 %46 %vec_cast1.i.i = bitcast i32* %47 to <8 x i32>* %cont_load2.i.i = load <8 x i32>, <8 x i32>* %vec_cast1.i.i, align 4 %48 = add nsw i32 %37, %loop18.i4 %49 = sext i32 %48 to i64 %50 = getelementptr inbounds [0 x i32], [0 x i32]* %77, i64 0, i64 %49 %vec_cast3.i.i = bitcast i32* %50 to <8 x i32>* %cont_load4.i.i = load <8 x i32>, <8 x i32>* %vec_cast3.i.i, align 4 %51 = add nsw i32 %79, %loop18.i4 %52 = add nsw i32 %39, %51 %53 = add nsw <8 x i32> %cont_load.i.i, %cont_load2.i.i %54 = add nsw <8 x i32> %53, %cont_load4.i.i %55 = sdiv <8 x i32> %54, %56 = sext i32 %52 to i64 %57 = getelementptr inbounds [0 x i32], [0 x i32]* %22, i64 0, i64 %56 %vec_cast5.i.i = bitcast i32* %57 to <8 x i32>* store <8 x i32> %55, <8 x i32>* %vec_cast5.i.i, align 4 %58 = add nuw nsw i32 %loop18.i4, 8 %59 = icmp ult i32 %loop18.i4, 248 br i1 %59, label %branch_true28.i, label %branch_false26.i branch_true30.i: ; preds = %branch_true.i, %branch_false40.i %loop6.i3 = phi i32 [ -1, %branch_true.i ], [ %75, %branch_false40.i ] %60 = add nsw i32 %23, %loop6.i3 %.lobit = ashr i32 %60, 31 %.lobit.not = xor i32 %.lobit, -1 %61 = insertelement <8 x i32> poison, i32 %.lobit.not, i64 0 %62 = shufflevector <8 x i32> %61, <8 x i32> poison, <8 x i32> zeroinitializer %63 = icmp sgt i32 %60, 0 %64 = mul nsw i32 %60, %8 %cont14.i.i = select i1 %63, i32 %60, i32 0 %65 = icmp slt i32 %cont14.i.i, %16 %cont18.i.i = select i1 %65, i32 %cont14.i.i, i32 %16 %66 = mul nsw i32 %cont18.i.i, %8 %.splatinsert7.i.i = insertelement <8 x i32> poison, i32 %66, i64 0 %.splat8.i.i = shufflevector <8 x i32> %.splatinsert7.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %.lobit11 = ashr i32 %60, 31 %67 = insertelement <8 x i32> poison, i32 %.lobit11, i64 0 %68 = shufflevector <8 x i32> %67, <8 x i32> poison, <8 x i32> zeroinitializer %cont41.i.i = select i1 %63, i32 %60, i32 0 %69 = icmp slt i32 %cont41.i.i, %16 %cont45.i.i = select i1 %69, i32 %cont41.i.i, i32 %16 %70 = mul nsw i32 %cont45.i.i, %8 %.splatinsert16.i.i = insertelement <8 x i32> poison, i32 %70, i64 0 %.splat17.i.i = shufflevector <8 x i32> %.splatinsert16.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %cont68.i.i = select i1 %63, i32 %60, i32 0 %71 = icmp slt i32 %cont68.i.i, %16 %cont72.i.i = select i1 %71, i32 %cont68.i.i, i32 %16 %72 = mul nsw i32 %cont72.i.i, %8 %.splatinsert23.i.i = insertelement <8 x i32> poison, i32 %72, i64 0 %.splat24.i.i = shufflevector <8 x i32> %.splatinsert23.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %73 = shl i32 %loop6.i3, 8 %74 = add i32 %73, 256 br label %branch_true120.i branch_false40.i: ; preds = %branch_true120.i %75 = add nsw i32 %loop6.i3, 1 %76 = icmp slt i32 %loop6.i3, 32 br i1 %76, label %branch_true30.i, label %branch_true16.i.preheader branch_true16.i.preheader: ; preds = %branch_false40.i %77 = bitcast [0 x i8]* %25 to [0 x i32]* %78 = add i32 %21, %loop1.i7 %79 = shl i32 %78, 8 br label %branch_true16.i branch_true120.i: ; preds = %branch_true30.i, %branch_true120.i %loop32.i1 = phi i32 [ 0, %branch_true30.i ], [ %150, %branch_true120.i ] %80 = add nsw i32 %loop32.i1, -1 %81 = add nsw i32 %27, %80 %.splatinsert.i.i = insertelement <8 x i32> poison, i32 %81, i64 0 %.splat.i.i = shufflevector <8 x i32> %.splatinsert.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add.i.i = add <8 x i32> %.splat.i.i, %82 = icmp slt <8 x i32> %contiguous_add.i.i, %.splat2.i.i %83 = select <8 x i1> %82, <8 x i32> %62, <8 x i32> zeroinitializer %84 = xor <8 x i32> %83, %85 = icmp sgt <8 x i32> %contiguous_add.i.i, zeroinitializer %86 = select <8 x i1> %85, <8 x i32> %contiguous_add.i.i, <8 x i32> zeroinitializer %87 = icmp slt <8 x i32> %86, %.splat6.i.i %88 = select <8 x i1> %87, <8 x i32> %86, <8 x i32> %.splat6.i.i %89 = add nsw <8 x i32> %.splat8.i.i, %88 %90 = icmp ne <8 x i32> %83, %91 = sext <8 x i1> %90 to <8 x i32> %92 = bitcast <8 x i32> %91 to <8 x float> %93 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %17, <8 x i32> %89, <8 x float> %92, i8 4) %94 = add nsw i32 %64, %81 %95 = sext i32 %94 to i64 %96 = getelementptr inbounds [0 x i32], [0 x i32]* %7, i64 0, i64 %95 %vec_cast.i122.i = bitcast i32* %96 to <8 x i32>* %97 = icmp ne <8 x i32> %83, zeroinitializer %98 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast.i122.i, i32 4, <8 x i1> %97, <8 x i32> undef) %99 = bitcast <8 x i32> %98 to <8 x float> %100 = bitcast <8 x i32> %84 to <8 x float> %101 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %99, <8 x float> %93, <8 x float> %100) %102 = bitcast <8 x float> %101 to <8 x i32> %103 = add nsw i32 %27, %loop32.i1 %.splatinsert9.i.i = insertelement <8 x i32> poison, i32 %103, i64 0 %.splat10.i.i = shufflevector <8 x i32> %.splatinsert9.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add11.i.i = or <8 x i32> %.splat10.i.i, %.not = icmp slt <8 x i32> %contiguous_add11.i.i, %.splat2.i.i %104 = select <8 x i1> %.not, <8 x i32> %68, <8 x i32> %105 = add nsw i32 %64, %103 %106 = sext i32 %105 to i64 %107 = getelementptr inbounds [0 x i32], [0 x i32]* %7, i64 0, i64 %106 %vec_cast14.i.i = bitcast i32* %107 to <8 x i32>* %108 = icmp ne <8 x i32> %104, %109 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast14.i.i, i32 4, <8 x i1> %108, <8 x i32> undef) %110 = icmp sgt <8 x i32> %contiguous_add11.i.i, zeroinitializer %111 = select <8 x i1> %110, <8 x i32> %contiguous_add11.i.i, <8 x i32> zeroinitializer %112 = icmp slt <8 x i32> %111, %.splat6.i.i %113 = select <8 x i1> %112, <8 x i32> %111, <8 x i32> %.splat6.i.i %114 = add nsw <8 x i32> %.splat17.i.i, %113 %115 = icmp ne <8 x i32> %104, zeroinitializer %116 = sext <8 x i1> %115 to <8 x i32> %117 = bitcast <8 x i32> %116 to <8 x float> %118 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %18, <8 x i32> %114, <8 x float> %117, i8 4) %119 = bitcast <8 x i32> %109 to <8 x float> %120 = bitcast <8 x i32> %104 to <8 x float> %121 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %119, <8 x float> %118, <8 x float> %120) %122 = bitcast <8 x float> %121 to <8 x i32> %123 = or i32 %loop32.i1, 1 %124 = add nsw i32 %27, %123 %.splatinsert18.i.i = insertelement <8 x i32> poison, i32 %124, i64 0 %.splat19.i.i = shufflevector <8 x i32> %.splatinsert18.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add20.i.i = add <8 x i32> %.splat19.i.i, %.not12 = icmp slt <8 x i32> %contiguous_add20.i.i, %.splat2.i.i %125 = select <8 x i1> %.not12, <8 x i32> %68, <8 x i32> %126 = add nsw i32 %64, %124 %127 = sext i32 %126 to i64 %128 = getelementptr inbounds [0 x i32], [0 x i32]* %7, i64 0, i64 %127 %vec_cast21.i.i = bitcast i32* %128 to <8 x i32>* %129 = icmp ne <8 x i32> %125, %130 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast21.i.i, i32 4, <8 x i1> %129, <8 x i32> undef) %131 = icmp sgt <8 x i32> %contiguous_add20.i.i, zeroinitializer %132 = select <8 x i1> %131, <8 x i32> %contiguous_add20.i.i, <8 x i32> zeroinitializer %133 = icmp slt <8 x i32> %132, %.splat6.i.i %134 = select <8 x i1> %133, <8 x i32> %132, <8 x i32> %.splat6.i.i %135 = add nsw <8 x i32> %.splat24.i.i, %134 %136 = icmp ne <8 x i32> %125, zeroinitializer %137 = sext <8 x i1> %136 to <8 x i32> %138 = bitcast <8 x i32> %137 to <8 x float> %139 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %19, <8 x i32> %135, <8 x float> %138, i8 4) %140 = bitcast <8 x i32> %130 to <8 x float> %141 = bitcast <8 x i32> %125 to <8 x float> %142 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %140, <8 x float> %139, <8 x float> %141) %143 = bitcast <8 x float> %142 to <8 x i32> %144 = add nsw i32 %74, %loop32.i1 %145 = add nsw <8 x i32> %102, %122 %146 = add nsw <8 x i32> %145, %143 %147 = sdiv <8 x i32> %146, %29 %148 = sext i32 %144 to i64 %149 = getelementptr inbounds [0 x i32], [0 x i32]* %30, i64 0, i64 %148 %vec_cast25.i.i = bitcast i32* %149 to <8 x i32>* store <8 x i32> %147, <8 x i32>* %vec_cast25.i.i, align 4 %150 = add nuw nsw i32 %loop32.i1, 8 %151 = icmp ult i32 %loop32.i1, 248 br i1 %151, label %branch_true120.i, label %branch_false40.i for_body_589133.exit: ; preds = %branch_false14.i, %body %152 = add i32 %parallel_loop_phi8, 1 %153 = icmp slt i32 %152, %2 br i1 %153, label %body, label %exit exit: ; preds = %for_body_589133.exit, %for_body_589133_parallel_for ret void } define void @for_body_589856_parallel_for(i8* %0, i32 %1, i32 %2) #0 { for_body_589856_parallel_for: %.elt = bitcast i8* %0 to [0 x i32]** %.unpack = load [0 x i32]*, [0 x i32]** %.elt, align 8 %.elt9 = getelementptr inbounds i8, i8* %0, i64 8 %3 = bitcast i8* %.elt9 to i32* %.unpack10 = load i32, i32* %3, align 8 %.elt11 = getelementptr inbounds i8, i8* %0, i64 12 %4 = bitcast i8* %.elt11 to i32* %.unpack12 = load i32, i32* %4, align 4 %.elt13 = getelementptr inbounds i8, i8* %0, i64 16 %5 = bitcast i8* %.elt13 to [0 x i32]** %.unpack1415 = load [0 x i32]*, [0 x i32]** %5, align 8 %6 = icmp slt i32 %1, %2 br i1 %6, label %branch_true.i.preheader, label %exit branch_true.i.preheader: ; preds = %for_body_589856_parallel_for %7 = add nsw i32 %.unpack12, -1 %8 = add nsw i32 %.unpack10, -1 %9 = icmp slt i32 %7, 0 %.68.i.i = select i1 %9, i32 %7, i32 0 %10 = icmp slt i32 %7, 0 %.70.i.i = select i1 %10, i32 %7, i32 0 %11 = icmp slt i32 %7, 0 %.72.i.i = select i1 %11, i32 %7, i32 0 br label %branch_true.i branch_true.i: ; preds = %branch_true.i.preheader, %branch_false14.i %parallel_loop_phi8 = phi i32 [ %19, %branch_false14.i ], [ %1, %branch_true.i.preheader ] %12 = call [0 x i8]* @anydsl_alloc(i32 0, i64 34816) %13 = shl nsw i32 %parallel_loop_phi8, 5 %14 = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> , <4 x i64> ) %15 = icmp eq i32 %14, 0 %16 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> , <8 x float> , <8 x float> ) %17 = bitcast <8 x float> %16 to <8 x i32> %18 = bitcast [0 x i8]* %12 to [0 x i32]* br label %branch_true30.i branch_false14.i: ; preds = %branch_false26.i call void @anydsl_release(i32 0, [0 x i8]* %12) %19 = add i32 %parallel_loop_phi8, 1 %20 = icmp slt i32 %19, %2 br i1 %20, label %branch_true.i, label %exit branch_true16.i: ; preds = %branch_true16.i.preheader, %branch_false26.i %loop11.i6 = phi i32 [ %29, %branch_false26.i ], [ 0, %branch_true16.i.preheader ] %21 = shl nsw i32 %loop11.i6, 8 %22 = shl i32 %loop11.i6, 8 %23 = add i32 %22, 256 %24 = shl i32 %loop11.i6, 8 %25 = add i32 %24, 512 %26 = add nsw i32 %72, %loop11.i6 %27 = add nsw i32 %26, 32 %28 = mul nsw i32 %27, %.unpack12 br label %branch_true28.i branch_false26.i: ; preds = %branch_true28.i %29 = add nuw nsw i32 %loop11.i6, 1 %30 = icmp ult i32 %loop11.i6, 31 br i1 %30, label %branch_true16.i, label %branch_false14.i branch_true28.i: ; preds = %branch_true16.i, %branch_true28.i %loop18.i4 = phi i32 [ 0, %branch_true16.i ], [ %46, %branch_true28.i ] %31 = add nuw nsw i32 %21, %loop18.i4 %32 = zext i32 %31 to i64 %33 = getelementptr inbounds [0 x i32], [0 x i32]* %71, i64 0, i64 %32 %vec_cast.i.i = bitcast i32* %33 to <8 x i32>* %cont_load.i.i = load <8 x i32>, <8 x i32>* %vec_cast.i.i, align 4 %34 = add nsw i32 %23, %loop18.i4 %35 = sext i32 %34 to i64 %36 = getelementptr inbounds [0 x i32], [0 x i32]* %71, i64 0, i64 %35 %vec_cast1.i.i = bitcast i32* %36 to <8 x i32>* %cont_load2.i.i = load <8 x i32>, <8 x i32>* %vec_cast1.i.i, align 4 %37 = add nsw i32 %25, %loop18.i4 %38 = sext i32 %37 to i64 %39 = getelementptr inbounds [0 x i32], [0 x i32]* %71, i64 0, i64 %38 %vec_cast3.i.i = bitcast i32* %39 to <8 x i32>* %cont_load4.i.i = load <8 x i32>, <8 x i32>* %vec_cast3.i.i, align 4 %40 = add nsw i32 %28, %loop18.i4 %41 = add nsw <8 x i32> %cont_load.i.i, %cont_load2.i.i %42 = add nsw <8 x i32> %41, %cont_load4.i.i %43 = sdiv <8 x i32> %42, %44 = sext i32 %40 to i64 %45 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack1415, i64 0, i64 %44 %vec_cast5.i.i = bitcast i32* %45 to <8 x i32>* store <8 x i32> %43, <8 x i32>* %vec_cast5.i.i, align 4 %46 = add nuw nsw i32 %loop18.i4, 8 %47 = icmp ult i32 %loop18.i4, 248 br i1 %47, label %branch_true28.i, label %branch_false26.i branch_true30.i: ; preds = %branch_true.i, %branch_false40.i %loop6.i3 = phi i32 [ -1, %branch_true.i ], [ %69, %branch_false40.i ] %48 = add nsw i32 %13, %loop6.i3 %49 = add nsw i32 %48, 32 %50 = icmp sgt i32 %48, -32 %51 = mul nsw i32 %49, %.unpack12 %cont12.i.i = select i1 %50, i32 %49, i32 0 %52 = icmp slt i32 %cont12.i.i, %8 %cont16.i.i = select i1 %52, i32 %cont12.i.i, i32 %8 %53 = mul nsw i32 %cont16.i.i, %.unpack12 %54 = add nsw i32 %53, %.68.i.i %55 = sext i32 %54 to i64 %56 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %55 %cont36.i.i = select i1 %50, i32 %49, i32 0 %57 = icmp slt i32 %cont36.i.i, %8 %cont40.i.i = select i1 %57, i32 %cont36.i.i, i32 %8 %58 = mul nsw i32 %cont40.i.i, %.unpack12 %59 = add nsw i32 %58, %.70.i.i %60 = sext i32 %59 to i64 %61 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %60 %cont60.i.i = select i1 %50, i32 %49, i32 0 %62 = icmp slt i32 %cont60.i.i, %8 %cont64.i.i = select i1 %62, i32 %cont60.i.i, i32 %8 %63 = mul nsw i32 %cont64.i.i, %.unpack12 %64 = add nsw i32 %63, %.72.i.i %65 = sext i32 %64 to i64 %66 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %65 %67 = shl i32 %loop6.i3, 8 %68 = add i32 %67, 256 br label %branch_true112.i branch_false40.i: ; preds = %_589901_vectorize.exit.i %69 = add nsw i32 %loop6.i3, 1 %70 = icmp slt i32 %loop6.i3, 32 br i1 %70, label %branch_true30.i, label %branch_true16.i.preheader branch_true16.i.preheader: ; preds = %branch_false40.i %71 = bitcast [0 x i8]* %12 to [0 x i32]* %72 = shl nsw i32 %parallel_loop_phi8, 5 br label %branch_true16.i branch_true112.i: ; preds = %branch_true30.i, %_589901_vectorize.exit.i %loop32.i1 = phi i32 [ 0, %branch_true30.i ], [ %118, %_589901_vectorize.exit.i ] %73 = add nsw i32 %loop32.i1, -1 %.splatinsert.i.i = insertelement <8 x i32> poison, i32 %73, i64 0 %.splat.i.i = shufflevector <8 x i32> %.splatinsert.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add.i.i = add <8 x i32> %.splat.i.i, %74 = icmp sgt <8 x i32> %contiguous_add.i.i, %contiguous_add.i.i.lobit = ashr <8 x i32> %contiguous_add.i.i, %75 = bitcast <8 x i32> %contiguous_add.i.i.lobit to <4 x i64> %76 = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %75, <4 x i64> %75) %77 = icmp eq i32 %76, 0 br i1 %77, label %mem_block.i.i, label %cont_block.i.i mem_block.i.i: ; preds = %branch_true112.i %scal_mask_mem.i.i = load i32, i32* %56, align 4 br label %cont_block.i.i cont_block.i.i: ; preds = %mem_block.i.i, %branch_true112.i %scal_mask_mem_phi.i.i = phi i32 [ %scal_mask_mem.i.i, %mem_block.i.i ], [ undef, %branch_true112.i ] %.splatinsert1.i.i = insertelement <8 x i32> poison, i32 %scal_mask_mem_phi.i.i, i64 0 %78 = add nsw i32 %51, %73 %79 = sext i32 %78 to i64 %80 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %79 %vec_cast.i114.i = bitcast i32* %80 to <8 x i32>* %81 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast.i114.i, i32 4, <8 x i1> %74, <8 x i32> undef) %82 = bitcast <8 x i32> %81 to <8 x float> %83 = bitcast <8 x i32> %.splatinsert1.i.i to <8 x float> %84 = shufflevector <8 x float> %83, <8 x float> poison, <8 x i32> zeroinitializer %85 = bitcast <8 x i32> %contiguous_add.i.i.lobit to <8 x float> %86 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %82, <8 x float> %84, <8 x float> %85) %87 = bitcast <8 x float> %86 to <8 x i32> br i1 %15, label %mem_block7.i.i, label %cont_block8.i.i mem_block7.i.i: ; preds = %cont_block.i.i %scal_mask_mem9.i.i = load i32, i32* %61, align 4 br label %cont_block8.i.i cont_block8.i.i: ; preds = %mem_block7.i.i, %cont_block.i.i %scal_mask_mem_phi10.i.i = phi i32 [ %scal_mask_mem9.i.i, %mem_block7.i.i ], [ undef, %cont_block.i.i ] %.splatinsert13.i.i = insertelement <8 x i32> poison, i32 %scal_mask_mem_phi10.i.i, i64 0 %88 = add nsw i32 %51, %loop32.i1 %89 = sext i32 %88 to i64 %90 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %89 %91 = bitcast i32* %90 to <8 x float>* %unmaskedload16 = load <8 x float>, <8 x float>* %91, align 4 %92 = bitcast <8 x i32> %.splatinsert13.i.i to <8 x float> %93 = shufflevector <8 x float> %92, <8 x float> poison, <8 x i32> zeroinitializer %94 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %unmaskedload16, <8 x float> %93, <8 x float> zeroinitializer) %95 = bitcast <8 x float> %94 to <8 x i32> %96 = or i32 %loop32.i1, 1 %.splatinsert15.i.i = insertelement <8 x i32> poison, i32 %96, i64 0 %.splat16.i.i = shufflevector <8 x i32> %.splatinsert15.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add17.i.i = add nuw <8 x i32> %.splat16.i.i, %contiguous_add17.i.i.lobit = ashr <8 x i32> %contiguous_add17.i.i, %97 = bitcast <8 x i32> %contiguous_add17.i.i.lobit to <4 x i64> %98 = xor <4 x i64> %97, %99 = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %98, <4 x i64> ) %100 = icmp eq i32 %99, 0 br i1 %100, label %mem_block19.i.i, label %_589901_vectorize.exit.i mem_block19.i.i: ; preds = %cont_block8.i.i %scal_mask_mem21.i.i = load i32, i32* %66, align 4 br label %_589901_vectorize.exit.i _589901_vectorize.exit.i: ; preds = %mem_block19.i.i, %cont_block8.i.i %scal_mask_mem_phi22.i.i = phi i32 [ %scal_mask_mem21.i.i, %mem_block19.i.i ], [ undef, %cont_block8.i.i ] %.splatinsert25.i.i = insertelement <8 x i32> poison, i32 %scal_mask_mem_phi22.i.i, i64 0 %101 = add nsw i32 %51, %96 %102 = sext i32 %101 to i64 %103 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %102 %vec_cast23.i.i = bitcast i32* %103 to <8 x i32>* %104 = icmp ne <8 x i32> %contiguous_add17.i.i.lobit, %105 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast23.i.i, i32 4, <8 x i1> %104, <8 x i32> undef) %106 = bitcast <8 x i32> %105 to <8 x float> %107 = bitcast <8 x i32> %.splatinsert25.i.i to <8 x float> %108 = shufflevector <8 x float> %107, <8 x float> poison, <8 x i32> zeroinitializer %109 = bitcast <8 x i32> %contiguous_add17.i.i.lobit to <8 x float> %110 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %106, <8 x float> %108, <8 x float> %109) %111 = bitcast <8 x float> %110 to <8 x i32> %112 = add nsw i32 %68, %loop32.i1 %113 = add nsw <8 x i32> %87, %95 %114 = add nsw <8 x i32> %113, %111 %115 = sdiv <8 x i32> %114, %17 %116 = sext i32 %112 to i64 %117 = getelementptr inbounds [0 x i32], [0 x i32]* %18, i64 0, i64 %116 %vec_cast27.i.i = bitcast i32* %117 to <8 x i32>* store <8 x i32> %115, <8 x i32>* %vec_cast27.i.i, align 4 %118 = add nuw nsw i32 %loop32.i1, 8 %119 = icmp ult i32 %loop32.i1, 248 br i1 %119, label %branch_true112.i, label %branch_false40.i exit: ; preds = %branch_false14.i, %for_body_589856_parallel_for ret void } define void @for_body_590527_parallel_for(i8* %0, i32 %1, i32 %2) #0 { for_body_590527_parallel_for: %3 = bitcast i8* %0 to { i32, [0 x i8]*, [0 x i32]* }* %4 = load { i32, [0 x i8]*, [0 x i32]* }, { i32, [0 x i8]*, [0 x i32]* }* %3, align 8 %5 = extractvalue { i32, [0 x i8]*, [0 x i32]* } %4, 0 %6 = extractvalue { i32, [0 x i8]*, [0 x i32]* } %4, 1 %7 = extractvalue { i32, [0 x i8]*, [0 x i32]* } %4, 2 %8 = icmp slt i32 %1, %2 br i1 %8, label %body.preheader, label %exit body.preheader: ; preds = %for_body_590527_parallel_for %9 = add nsw i32 %5, -1 %10 = sdiv i32 %9, 256 %11 = shl nsw i32 %10, 8 %12 = add nsw i32 %11, -256 %13 = sdiv i32 %12, 256 %14 = icmp sgt i32 %5, 512 %15 = bitcast [0 x i8]* %6 to [0 x i32]* br label %body body: ; preds = %body.preheader, %for_body_590527.exit %parallel_loop_phi8 = phi i32 [ %86, %for_body_590527.exit ], [ %1, %body.preheader ] br i1 %14, label %branch_true.i.preheader, label %for_body_590527.exit branch_true.i.preheader: ; preds = %body %16 = shl nsw i32 %parallel_loop_phi8, 5 %17 = shl nsw i32 %parallel_loop_phi8, 5 br label %branch_true.i branch_true.i: ; preds = %branch_true.i.preheader, %branch_false14.i %loop1.i7 = phi i32 [ %21, %branch_false14.i ], [ 0, %branch_true.i.preheader ] %18 = call [0 x i8]* @anydsl_alloc(i32 0, i64 34816) %19 = shl nsw i32 %loop1.i7, 8 %20 = bitcast [0 x i8]* %18 to [0 x i32]* br label %branch_true30.i branch_false14.i: ; preds = %branch_false26.i call void @anydsl_release(i32 0, [0 x i8]* %18) %21 = add nuw nsw i32 %loop1.i7, 1 %22 = icmp slt i32 %21, %13 br i1 %22, label %branch_true.i, label %for_body_590527.exit branch_true16.i: ; preds = %branch_true16.i.preheader, %branch_false26.i %loop11.i6 = phi i32 [ %31, %branch_false26.i ], [ 0, %branch_true16.i.preheader ] %23 = shl nsw i32 %loop11.i6, 8 %24 = shl i32 %loop11.i6, 8 %25 = add i32 %24, 256 %26 = shl i32 %loop11.i6, 8 %27 = add i32 %26, 512 %28 = add nsw i32 %17, %loop11.i6 %29 = add nsw i32 %28, 32 %30 = mul nsw i32 %29, %5 br label %branch_true28.i branch_false26.i: ; preds = %branch_true28.i %31 = add nuw nsw i32 %loop11.i6, 1 %32 = icmp ult i32 %loop11.i6, 31 br i1 %32, label %branch_true16.i, label %branch_false14.i branch_true28.i: ; preds = %branch_true16.i, %branch_true28.i %loop18.i4 = phi i32 [ 0, %branch_true16.i ], [ %50, %branch_true28.i ] %33 = add nuw nsw i32 %23, %loop18.i4 %34 = zext i32 %33 to i64 %35 = getelementptr inbounds [0 x i32], [0 x i32]* %59, i64 0, i64 %34 %vec_cast.i.i = bitcast i32* %35 to <8 x i32>* %cont_load.i.i = load <8 x i32>, <8 x i32>* %vec_cast.i.i, align 4 %36 = add nsw i32 %25, %loop18.i4 %37 = sext i32 %36 to i64 %38 = getelementptr inbounds [0 x i32], [0 x i32]* %59, i64 0, i64 %37 %vec_cast1.i.i = bitcast i32* %38 to <8 x i32>* %cont_load2.i.i = load <8 x i32>, <8 x i32>* %vec_cast1.i.i, align 4 %39 = add nsw i32 %27, %loop18.i4 %40 = sext i32 %39 to i64 %41 = getelementptr inbounds [0 x i32], [0 x i32]* %59, i64 0, i64 %40 %vec_cast3.i.i = bitcast i32* %41 to <8 x i32>* %cont_load4.i.i = load <8 x i32>, <8 x i32>* %vec_cast3.i.i, align 4 %42 = add nuw nsw i32 %60, %loop18.i4 %43 = add nsw i32 %30, %42 %44 = add nsw i32 %43, 256 %45 = add nsw <8 x i32> %cont_load.i.i, %cont_load2.i.i %46 = add nsw <8 x i32> %45, %cont_load4.i.i %47 = sdiv <8 x i32> %46, %48 = sext i32 %44 to i64 %49 = getelementptr inbounds [0 x i32], [0 x i32]* %15, i64 0, i64 %48 %vec_cast5.i.i = bitcast i32* %49 to <8 x i32>* store <8 x i32> %47, <8 x i32>* %vec_cast5.i.i, align 4 %50 = add nuw nsw i32 %loop18.i4, 8 %51 = icmp ult i32 %loop18.i4, 248 br i1 %51, label %branch_true28.i, label %branch_false26.i branch_true30.i: ; preds = %branch_true.i, %branch_false40.i %loop6.i3 = phi i32 [ -1, %branch_true.i ], [ %57, %branch_false40.i ] %52 = add nsw i32 %16, %loop6.i3 %53 = add nsw i32 %52, 32 %54 = mul nsw i32 %53, %5 %55 = shl i32 %loop6.i3, 8 %56 = add i32 %55, 256 br label %branch_true42.i branch_false40.i: ; preds = %branch_true42.i %57 = add nsw i32 %loop6.i3, 1 %58 = icmp slt i32 %loop6.i3, 32 br i1 %58, label %branch_true30.i, label %branch_true16.i.preheader branch_true16.i.preheader: ; preds = %branch_false40.i %59 = bitcast [0 x i8]* %18 to [0 x i32]* %60 = shl nsw i32 %loop1.i7, 8 br label %branch_true16.i branch_true42.i: ; preds = %branch_true30.i, %branch_true42.i %loop32.i1 = phi i32 [ 0, %branch_true30.i ], [ %84, %branch_true42.i ] %61 = add nsw i32 %loop32.i1, -1 %62 = add nsw i32 %19, %61 %63 = add nsw i32 %54, %62 %64 = add nsw i32 %63, 256 %65 = sext i32 %64 to i64 %66 = getelementptr inbounds [0 x i32], [0 x i32]* %7, i64 0, i64 %65 %vec_cast.i44.i = bitcast i32* %66 to <8 x i32>* %cont_load.i45.i = load <8 x i32>, <8 x i32>* %vec_cast.i44.i, align 4 %67 = add nuw nsw i32 %19, %loop32.i1 %68 = add nsw i32 %54, %67 %69 = add nsw i32 %68, 256 %70 = sext i32 %69 to i64 %71 = getelementptr inbounds [0 x i32], [0 x i32]* %7, i64 0, i64 %70 %vec_cast1.i46.i = bitcast i32* %71 to <8 x i32>* %cont_load2.i47.i = load <8 x i32>, <8 x i32>* %vec_cast1.i46.i, align 4 %72 = or i32 %loop32.i1, 1 %73 = add nuw nsw i32 %19, %72 %74 = add nsw i32 %54, %73 %75 = add nsw i32 %74, 256 %76 = sext i32 %75 to i64 %77 = getelementptr inbounds [0 x i32], [0 x i32]* %7, i64 0, i64 %76 %vec_cast3.i48.i = bitcast i32* %77 to <8 x i32>* %cont_load4.i49.i = load <8 x i32>, <8 x i32>* %vec_cast3.i48.i, align 4 %78 = add nsw i32 %56, %loop32.i1 %79 = add nsw <8 x i32> %cont_load.i45.i, %cont_load2.i47.i %80 = add nsw <8 x i32> %79, %cont_load4.i49.i %81 = sdiv <8 x i32> %80, %82 = sext i32 %78 to i64 %83 = getelementptr inbounds [0 x i32], [0 x i32]* %20, i64 0, i64 %82 %vec_cast5.i50.i = bitcast i32* %83 to <8 x i32>* store <8 x i32> %81, <8 x i32>* %vec_cast5.i50.i, align 4 %84 = add nuw nsw i32 %loop32.i1, 8 %85 = icmp ult i32 %loop32.i1, 248 br i1 %85, label %branch_true42.i, label %branch_false40.i for_body_590527.exit: ; preds = %branch_false14.i, %body %86 = add i32 %parallel_loop_phi8, 1 %87 = icmp slt i32 %86, %2 br i1 %87, label %body, label %exit exit: ; preds = %for_body_590527.exit, %for_body_590527_parallel_for ret void } define void @for_body_590855_parallel_for(i8* %0, i32 %1, i32 %2) #0 { for_body_590855_parallel_for: %3 = bitcast i8* %0 to [0 x i32]** %.unpack16 = load [0 x i32]*, [0 x i32]** %3, align 8 %.elt10 = getelementptr inbounds i8, i8* %0, i64 8 %4 = bitcast i8* %.elt10 to [0 x i32]** %.unpack11 = load [0 x i32]*, [0 x i32]** %4, align 8 %.elt12 = getelementptr inbounds i8, i8* %0, i64 16 %5 = bitcast i8* %.elt12 to i32* %.unpack13 = load i32, i32* %5, align 8 %.elt14 = getelementptr inbounds i8, i8* %0, i64 20 %6 = bitcast i8* %.elt14 to i32* %.unpack15 = load i32, i32* %6, align 4 %7 = icmp slt i32 %1, %2 br i1 %7, label %body.preheader, label %exit body.preheader: ; preds = %for_body_590855_parallel_for %8 = add nsw i32 %.unpack13, -1 %.neg = sdiv i32 %8, -256 %.neg17 = shl i32 %.neg, 8 %9 = add i32 %.neg17, %.unpack13 %10 = sdiv i32 %9, 256 %11 = icmp sgt i32 %9, 255 %12 = add nsw i32 %.unpack13, -1 %13 = sdiv i32 %12, 256 %.splatinsert1.i.i = insertelement <8 x i32> poison, i32 %.unpack13, i64 0 %.splat2.i.i = shufflevector <8 x i32> %.splatinsert1.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %14 = add nsw i32 %.unpack15, -1 %.splatinsert3.i.i = insertelement <8 x i32> poison, i32 %12, i64 0 %.splat4.i.i = shufflevector <8 x i32> %.splatinsert3.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %15 = bitcast [0 x i32]* %.unpack11 to i8* %16 = bitcast [0 x i32]* %.unpack11 to i8* %17 = bitcast [0 x i32]* %.unpack11 to i8* %18 = add nsw i32 %.unpack13, -1 %19 = sdiv i32 %18, 256 br label %body body: ; preds = %body.preheader, %for_body_590855.exit %parallel_loop_phi8 = phi i32 [ %147, %for_body_590855.exit ], [ %1, %body.preheader ] br i1 %11, label %branch_true.i.preheader, label %for_body_590855.exit branch_true.i.preheader: ; preds = %body %20 = shl nsw i32 %parallel_loop_phi8, 5 %21 = shl nsw i32 %parallel_loop_phi8, 5 br label %branch_true.i branch_true.i: ; preds = %branch_true.i.preheader, %branch_false14.i %loop1.i7 = phi i32 [ %28, %branch_false14.i ], [ 0, %branch_true.i.preheader ] %22 = call [0 x i8]* @anydsl_alloc(i32 0, i64 34816) %23 = add i32 %13, %loop1.i7 %24 = shl i32 %23, 8 %25 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> , <8 x float> , <8 x float> ) %26 = bitcast <8 x float> %25 to <8 x i32> %27 = bitcast [0 x i8]* %22 to [0 x i32]* br label %branch_true30.i branch_false14.i: ; preds = %branch_false26.i call void @anydsl_release(i32 0, [0 x i8]* %22) %28 = add nuw nsw i32 %loop1.i7, 1 %29 = icmp slt i32 %28, %10 br i1 %29, label %branch_true.i, label %for_body_590855.exit branch_true16.i: ; preds = %branch_true16.i.preheader, %branch_false26.i %loop11.i6 = phi i32 [ %38, %branch_false26.i ], [ 0, %branch_true16.i.preheader ] %30 = shl nsw i32 %loop11.i6, 8 %31 = shl i32 %loop11.i6, 8 %32 = add i32 %31, 256 %33 = shl i32 %loop11.i6, 8 %34 = add i32 %33, 512 %35 = add nsw i32 %21, %loop11.i6 %36 = add nsw i32 %35, 32 %37 = mul nsw i32 %36, %.unpack13 br label %branch_true28.i branch_false26.i: ; preds = %branch_true28.i %38 = add nuw nsw i32 %loop11.i6, 1 %39 = icmp ult i32 %loop11.i6, 31 br i1 %39, label %branch_true16.i, label %branch_false14.i branch_true28.i: ; preds = %branch_true16.i, %branch_true28.i %loop18.i4 = phi i32 [ 0, %branch_true16.i ], [ %56, %branch_true28.i ] %40 = add nuw nsw i32 %30, %loop18.i4 %41 = zext i32 %40 to i64 %42 = getelementptr inbounds [0 x i32], [0 x i32]* %72, i64 0, i64 %41 %vec_cast.i.i = bitcast i32* %42 to <8 x i32>* %cont_load.i.i = load <8 x i32>, <8 x i32>* %vec_cast.i.i, align 4 %43 = add nsw i32 %32, %loop18.i4 %44 = sext i32 %43 to i64 %45 = getelementptr inbounds [0 x i32], [0 x i32]* %72, i64 0, i64 %44 %vec_cast1.i.i = bitcast i32* %45 to <8 x i32>* %cont_load2.i.i = load <8 x i32>, <8 x i32>* %vec_cast1.i.i, align 4 %46 = add nsw i32 %34, %loop18.i4 %47 = sext i32 %46 to i64 %48 = getelementptr inbounds [0 x i32], [0 x i32]* %72, i64 0, i64 %47 %vec_cast3.i.i = bitcast i32* %48 to <8 x i32>* %cont_load4.i.i = load <8 x i32>, <8 x i32>* %vec_cast3.i.i, align 4 %49 = add nsw i32 %74, %loop18.i4 %50 = add nsw i32 %37, %49 %51 = add nsw <8 x i32> %cont_load.i.i, %cont_load2.i.i %52 = add nsw <8 x i32> %51, %cont_load4.i.i %53 = sdiv <8 x i32> %52, %54 = sext i32 %50 to i64 %55 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack16, i64 0, i64 %54 %vec_cast5.i.i = bitcast i32* %55 to <8 x i32>* store <8 x i32> %53, <8 x i32>* %vec_cast5.i.i, align 4 %56 = add nuw nsw i32 %loop18.i4, 8 %57 = icmp ult i32 %loop18.i4, 248 br i1 %57, label %branch_true28.i, label %branch_false26.i branch_true30.i: ; preds = %branch_true.i, %branch_false40.i %loop6.i3 = phi i32 [ -1, %branch_true.i ], [ %70, %branch_false40.i ] %58 = add nsw i32 %20, %loop6.i3 %59 = add nsw i32 %58, 32 %60 = icmp sgt i32 %58, -32 %61 = mul nsw i32 %59, %.unpack13 %cont12.i.i = select i1 %60, i32 %59, i32 0 %62 = icmp slt i32 %cont12.i.i, %14 %cont16.i.i = select i1 %62, i32 %cont12.i.i, i32 %14 %63 = mul nsw i32 %cont16.i.i, %.unpack13 %.splatinsert5.i.i = insertelement <8 x i32> poison, i32 %63, i64 0 %.splat6.i.i = shufflevector <8 x i32> %.splatinsert5.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %cont36.i.i = select i1 %60, i32 %59, i32 0 %64 = icmp slt i32 %cont36.i.i, %14 %cont40.i.i = select i1 %64, i32 %cont36.i.i, i32 %14 %65 = mul nsw i32 %cont40.i.i, %.unpack13 %.splatinsert10.i.i = insertelement <8 x i32> poison, i32 %65, i64 0 %.splat11.i.i = shufflevector <8 x i32> %.splatinsert10.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %cont60.i.i = select i1 %60, i32 %59, i32 0 %66 = icmp slt i32 %cont60.i.i, %14 %cont64.i.i = select i1 %66, i32 %cont60.i.i, i32 %14 %67 = mul nsw i32 %cont64.i.i, %.unpack13 %.splatinsert17.i.i = insertelement <8 x i32> poison, i32 %67, i64 0 %.splat18.i.i = shufflevector <8 x i32> %.splatinsert17.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %68 = shl i32 %loop6.i3, 8 %69 = add i32 %68, 256 br label %branch_true112.i branch_false40.i: ; preds = %branch_true112.i %70 = add nsw i32 %loop6.i3, 1 %71 = icmp slt i32 %loop6.i3, 32 br i1 %71, label %branch_true30.i, label %branch_true16.i.preheader branch_true16.i.preheader: ; preds = %branch_false40.i %72 = bitcast [0 x i8]* %22 to [0 x i32]* %73 = add i32 %19, %loop1.i7 %74 = shl i32 %73, 8 br label %branch_true16.i branch_true112.i: ; preds = %branch_true30.i, %branch_true112.i %loop32.i1 = phi i32 [ 0, %branch_true30.i ], [ %145, %branch_true112.i ] %75 = add nsw i32 %loop32.i1, -1 %76 = add nsw i32 %24, %75 %.splatinsert.i.i = insertelement <8 x i32> poison, i32 %76, i64 0 %.splat.i.i = shufflevector <8 x i32> %.splatinsert.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add.i.i = add <8 x i32> %.splat.i.i, %77 = icmp slt <8 x i32> %contiguous_add.i.i, %.splat2.i.i %78 = xor <8 x i1> %77, %79 = sext <8 x i1> %78 to <8 x i32> %80 = icmp sgt <8 x i32> %contiguous_add.i.i, zeroinitializer %81 = select <8 x i1> %80, <8 x i32> %contiguous_add.i.i, <8 x i32> zeroinitializer %82 = icmp slt <8 x i32> %81, %.splat4.i.i %83 = select <8 x i1> %82, <8 x i32> %81, <8 x i32> %.splat4.i.i %84 = add nsw <8 x i32> %.splat6.i.i, %83 %85 = sext <8 x i1> %78 to <8 x i32> %86 = bitcast <8 x i32> %85 to <8 x float> %87 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %15, <8 x i32> %84, <8 x float> %86, i8 4) %88 = add nsw i32 %61, %76 %89 = sext i32 %88 to i64 %90 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack11, i64 0, i64 %89 %vec_cast.i114.i = bitcast i32* %90 to <8 x i32>* %91 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast.i114.i, i32 4, <8 x i1> %77, <8 x i32> undef) %92 = bitcast <8 x i32> %91 to <8 x float> %93 = bitcast <8 x i32> %79 to <8 x float> %94 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %92, <8 x float> %87, <8 x float> %93) %95 = bitcast <8 x float> %94 to <8 x i32> %96 = add nsw i32 %24, %loop32.i1 %.splatinsert7.i.i = insertelement <8 x i32> poison, i32 %96, i64 0 %.splat8.i.i = shufflevector <8 x i32> %.splatinsert7.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add9.i.i = or <8 x i32> %.splat8.i.i, %97 = icmp slt <8 x i32> %contiguous_add9.i.i, %.splat2.i.i %98 = xor <8 x i1> %97, %99 = sext <8 x i1> %98 to <8 x i32> %100 = icmp sgt <8 x i32> %contiguous_add9.i.i, zeroinitializer %101 = select <8 x i1> %100, <8 x i32> %contiguous_add9.i.i, <8 x i32> zeroinitializer %102 = icmp slt <8 x i32> %101, %.splat4.i.i %103 = select <8 x i1> %102, <8 x i32> %101, <8 x i32> %.splat4.i.i %104 = add nsw <8 x i32> %.splat11.i.i, %103 %105 = xor <8 x i1> %97, %106 = sext <8 x i1> %105 to <8 x i32> %107 = bitcast <8 x i32> %106 to <8 x float> %108 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %16, <8 x i32> %104, <8 x float> %107, i8 4) %109 = add nsw i32 %61, %96 %110 = sext i32 %109 to i64 %111 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack11, i64 0, i64 %110 %vec_cast12.i.i = bitcast i32* %111 to <8 x i32>* %112 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast12.i.i, i32 4, <8 x i1> %97, <8 x i32> undef) %113 = bitcast <8 x i32> %112 to <8 x float> %114 = bitcast <8 x i32> %99 to <8 x float> %115 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %113, <8 x float> %108, <8 x float> %114) %116 = bitcast <8 x float> %115 to <8 x i32> %117 = or i32 %loop32.i1, 1 %118 = add nsw i32 %24, %117 %.splatinsert14.i.i = insertelement <8 x i32> poison, i32 %118, i64 0 %.splat15.i.i = shufflevector <8 x i32> %.splatinsert14.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add16.i.i = add <8 x i32> %.splat15.i.i, %119 = icmp slt <8 x i32> %contiguous_add16.i.i, %.splat2.i.i %120 = xor <8 x i1> %119, %121 = sext <8 x i1> %120 to <8 x i32> %122 = icmp sgt <8 x i32> %contiguous_add16.i.i, zeroinitializer %123 = select <8 x i1> %122, <8 x i32> %contiguous_add16.i.i, <8 x i32> zeroinitializer %124 = icmp slt <8 x i32> %123, %.splat4.i.i %125 = select <8 x i1> %124, <8 x i32> %123, <8 x i32> %.splat4.i.i %126 = add nsw <8 x i32> %.splat18.i.i, %125 %127 = xor <8 x i1> %119, %128 = sext <8 x i1> %127 to <8 x i32> %129 = bitcast <8 x i32> %128 to <8 x float> %130 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %17, <8 x i32> %126, <8 x float> %129, i8 4) %131 = add nsw i32 %61, %118 %132 = sext i32 %131 to i64 %133 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack11, i64 0, i64 %132 %vec_cast19.i.i = bitcast i32* %133 to <8 x i32>* %134 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast19.i.i, i32 4, <8 x i1> %119, <8 x i32> undef) %135 = bitcast <8 x i32> %134 to <8 x float> %136 = bitcast <8 x i32> %121 to <8 x float> %137 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %135, <8 x float> %130, <8 x float> %136) %138 = bitcast <8 x float> %137 to <8 x i32> %139 = add nsw i32 %69, %loop32.i1 %140 = add nsw <8 x i32> %95, %116 %141 = add nsw <8 x i32> %140, %138 %142 = sdiv <8 x i32> %141, %26 %143 = sext i32 %139 to i64 %144 = getelementptr inbounds [0 x i32], [0 x i32]* %27, i64 0, i64 %143 %vec_cast21.i.i = bitcast i32* %144 to <8 x i32>* store <8 x i32> %142, <8 x i32>* %vec_cast21.i.i, align 4 %145 = add nuw nsw i32 %loop32.i1, 8 %146 = icmp ult i32 %loop32.i1, 248 br i1 %146, label %branch_true112.i, label %branch_false40.i for_body_590855.exit: ; preds = %branch_false14.i, %body %147 = add i32 %parallel_loop_phi8, 1 %148 = icmp slt i32 %147, %2 br i1 %148, label %body, label %exit exit: ; preds = %for_body_590855.exit, %for_body_590855_parallel_for ret void } define void @for_body_591541_parallel_for(i8* %0, i32 %1, i32 %2) #0 { for_body_591541_parallel_for: %.elt = bitcast i8* %0 to [0 x i32]** %.unpack = load [0 x i32]*, [0 x i32]** %.elt, align 8 %.elt9 = getelementptr inbounds i8, i8* %0, i64 8 %3 = bitcast i8* %.elt9 to [0 x i32]** %.unpack1015 = load [0 x i32]*, [0 x i32]** %3, align 8 %.elt11 = getelementptr inbounds i8, i8* %0, i64 16 %4 = bitcast i8* %.elt11 to i32* %.unpack12 = load i32, i32* %4, align 8 %.elt13 = getelementptr inbounds i8, i8* %0, i64 20 %5 = bitcast i8* %.elt13 to i32* %.unpack14 = load i32, i32* %5, align 4 %6 = icmp slt i32 %1, %2 br i1 %6, label %branch_true.i.preheader, label %exit branch_true.i.preheader: ; preds = %for_body_591541_parallel_for %7 = add nsw i32 %.unpack12, -1 %8 = sdiv i32 %7, 32 %9 = add nsw i32 %.unpack14, -1 %.splatinsert3.i.i = insertelement <8 x i32> poison, i32 %9, i64 0 %.splat4.i.i = shufflevector <8 x i32> %.splatinsert3.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %10 = bitcast [0 x i32]* %.unpack to i8* %11 = bitcast [0 x i32]* %.unpack to i8* %12 = bitcast [0 x i32]* %.unpack to i8* %13 = add nsw i32 %.unpack12, -1 %14 = sdiv i32 %13, 32 br label %branch_true.i branch_true.i: ; preds = %branch_true.i.preheader, %branch_false14.i %parallel_loop_phi8 = phi i32 [ %21, %branch_false14.i ], [ %1, %branch_true.i.preheader ] %15 = call [0 x i8]* @anydsl_alloc(i32 0, i64 34816) %16 = add i32 %8, %parallel_loop_phi8 %17 = shl i32 %16, 5 %18 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> , <8 x float> , <8 x float> ) %19 = bitcast <8 x float> %18 to <8 x i32> %20 = bitcast [0 x i8]* %15 to [0 x i32]* br label %branch_true30.i branch_false14.i: ; preds = %branch_false26.i call void @anydsl_release(i32 0, [0 x i8]* %15) %21 = add i32 %parallel_loop_phi8, 1 %22 = icmp slt i32 %21, %2 br i1 %22, label %branch_true.i, label %exit branch_true16.i: ; preds = %branch_true16.i.preheader, %branch_false26.i %loop11.i6 = phi i32 [ %30, %branch_false26.i ], [ 0, %branch_true16.i.preheader ] %23 = shl nsw i32 %loop11.i6, 8 %24 = shl i32 %loop11.i6, 8 %25 = add i32 %24, 256 %26 = shl i32 %loop11.i6, 8 %27 = add i32 %26, 512 %28 = add nsw i32 %76, %loop11.i6 %29 = mul nsw i32 %28, %.unpack14 br label %branch_true28.i branch_false26.i: ; preds = %branch_true28.i %30 = add nuw nsw i32 %loop11.i6, 1 %31 = icmp ult i32 %loop11.i6, 31 br i1 %31, label %branch_true16.i, label %branch_false14.i branch_true28.i: ; preds = %branch_true16.i, %branch_true28.i %loop18.i4 = phi i32 [ 0, %branch_true16.i ], [ %47, %branch_true28.i ] %32 = add nuw nsw i32 %23, %loop18.i4 %33 = zext i32 %32 to i64 %34 = getelementptr inbounds [0 x i32], [0 x i32]* %74, i64 0, i64 %33 %vec_cast.i.i = bitcast i32* %34 to <8 x i32>* %cont_load.i.i = load <8 x i32>, <8 x i32>* %vec_cast.i.i, align 4 %35 = add nsw i32 %25, %loop18.i4 %36 = sext i32 %35 to i64 %37 = getelementptr inbounds [0 x i32], [0 x i32]* %74, i64 0, i64 %36 %vec_cast1.i.i = bitcast i32* %37 to <8 x i32>* %cont_load2.i.i = load <8 x i32>, <8 x i32>* %vec_cast1.i.i, align 4 %38 = add nsw i32 %27, %loop18.i4 %39 = sext i32 %38 to i64 %40 = getelementptr inbounds [0 x i32], [0 x i32]* %74, i64 0, i64 %39 %vec_cast3.i.i = bitcast i32* %40 to <8 x i32>* %cont_load4.i.i = load <8 x i32>, <8 x i32>* %vec_cast3.i.i, align 4 %41 = add nsw i32 %29, %loop18.i4 %42 = add nsw <8 x i32> %cont_load.i.i, %cont_load2.i.i %43 = add nsw <8 x i32> %42, %cont_load4.i.i %44 = sdiv <8 x i32> %43, %45 = sext i32 %41 to i64 %46 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack1015, i64 0, i64 %45 %vec_cast5.i.i = bitcast i32* %46 to <8 x i32>* store <8 x i32> %44, <8 x i32>* %vec_cast5.i.i, align 4 %47 = add nuw nsw i32 %loop18.i4, 8 %48 = icmp ult i32 %loop18.i4, 248 br i1 %48, label %branch_true28.i, label %branch_false26.i branch_true30.i: ; preds = %branch_true.i, %branch_false40.i %loop6.i3 = phi i32 [ -1, %branch_true.i ], [ %72, %branch_false40.i ] %49 = add nsw i32 %17, %loop6.i3 %50 = icmp slt i32 %49, %.unpack12 %51 = sext i1 %50 to i32 %52 = insertelement <8 x i32> poison, i32 %51, i64 0 %53 = shufflevector <8 x i32> %52, <8 x i32> poison, <8 x i32> zeroinitializer %54 = icmp sgt i32 %49, 0 %55 = mul nsw i32 %49, %.unpack14 %cont14.i.i = select i1 %54, i32 %49, i32 0 %56 = icmp slt i32 %cont14.i.i, %7 %cont18.i.i = select i1 %56, i32 %cont14.i.i, i32 %7 %57 = mul nsw i32 %cont18.i.i, %.unpack14 %.splatinsert5.i.i = insertelement <8 x i32> poison, i32 %57, i64 0 %.splat6.i.i = shufflevector <8 x i32> %.splatinsert5.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %.not78.i.i = xor i1 %50, true %58 = sext i1 %.not78.i.i to i32 %59 = insertelement <8 x i32> poison, i32 %58, i64 0 %60 = shufflevector <8 x i32> %59, <8 x i32> poison, <8 x i32> zeroinitializer %61 = icmp ne <8 x i32> %60, %cont41.i.i = select i1 %54, i32 %49, i32 0 %62 = icmp slt i32 %cont41.i.i, %7 %cont45.i.i = select i1 %62, i32 %cont41.i.i, i32 %7 %63 = mul nsw i32 %cont45.i.i, %.unpack14 %.splatinsert14.i.i = insertelement <8 x i32> poison, i32 %63, i64 0 %.splat15.i.i = shufflevector <8 x i32> %.splatinsert14.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %64 = icmp ne <8 x i32> %60, zeroinitializer %65 = sext <8 x i1> %64 to <8 x i32> %66 = bitcast <8 x i32> %65 to <8 x float> %67 = bitcast <8 x i32> %60 to <8 x float> %cont68.i.i = select i1 %54, i32 %49, i32 0 %68 = icmp slt i32 %cont68.i.i, %7 %cont72.i.i = select i1 %68, i32 %cont68.i.i, i32 %7 %69 = mul nsw i32 %cont72.i.i, %.unpack14 %.splatinsert21.i.i = insertelement <8 x i32> poison, i32 %69, i64 0 %.splat22.i.i = shufflevector <8 x i32> %.splatinsert21.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %70 = shl i32 %loop6.i3, 8 %71 = add i32 %70, 256 br label %branch_true120.i branch_false40.i: ; preds = %branch_true120.i %72 = add nsw i32 %loop6.i3, 1 %73 = icmp slt i32 %loop6.i3, 32 br i1 %73, label %branch_true30.i, label %branch_true16.i.preheader branch_true16.i.preheader: ; preds = %branch_false40.i %74 = bitcast [0 x i8]* %15 to [0 x i32]* %75 = add i32 %14, %parallel_loop_phi8 %76 = shl i32 %75, 5 br label %branch_true16.i branch_true120.i: ; preds = %branch_true30.i, %branch_true120.i %loop32.i1 = phi i32 [ 0, %branch_true30.i ], [ %136, %branch_true120.i ] %77 = add nsw i32 %loop32.i1, -1 %.splatinsert.i.i = insertelement <8 x i32> poison, i32 %77, i64 0 %.splat.i.i = shufflevector <8 x i32> %.splatinsert.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add.i.i = add <8 x i32> %.splat.i.i, %isneg = icmp slt <8 x i32> %contiguous_add.i.i, zeroinitializer %78 = select <8 x i1> %isneg, <8 x i32> zeroinitializer, <8 x i32> %53 %79 = xor <8 x i32> %78, %80 = icmp sgt <8 x i32> %contiguous_add.i.i, zeroinitializer %81 = select <8 x i1> %80, <8 x i32> %contiguous_add.i.i, <8 x i32> zeroinitializer %82 = icmp slt <8 x i32> %81, %.splat4.i.i %83 = select <8 x i1> %82, <8 x i32> %81, <8 x i32> %.splat4.i.i %84 = add nsw <8 x i32> %.splat6.i.i, %83 %85 = icmp ne <8 x i32> %78, %86 = sext <8 x i1> %85 to <8 x i32> %87 = bitcast <8 x i32> %86 to <8 x float> %88 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %10, <8 x i32> %84, <8 x float> %87, i8 4) %89 = add nsw i32 %55, %77 %90 = sext i32 %89 to i64 %91 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %90 %vec_cast.i122.i = bitcast i32* %91 to <8 x i32>* %92 = icmp ne <8 x i32> %78, zeroinitializer %93 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast.i122.i, i32 4, <8 x i1> %92, <8 x i32> undef) %94 = bitcast <8 x i32> %93 to <8 x float> %95 = bitcast <8 x i32> %79 to <8 x float> %96 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %94, <8 x float> %88, <8 x float> %95) %97 = bitcast <8 x float> %96 to <8 x i32> %.splatinsert7.i.i = insertelement <8 x i32> poison, i32 %loop32.i1, i64 0 %.splat8.i.i = shufflevector <8 x i32> %.splatinsert7.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add9.i.i = or <8 x i32> %.splat8.i.i, %98 = add nsw i32 %55, %loop32.i1 %99 = sext i32 %98 to i64 %100 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %99 %vec_cast12.i.i = bitcast i32* %100 to <8 x i32>* %101 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast12.i.i, i32 4, <8 x i1> %61, <8 x i32> undef) %.not = icmp eq <8 x i32> %contiguous_add9.i.i, zeroinitializer %102 = select <8 x i1> %.not, <8 x i32> zeroinitializer, <8 x i32> %contiguous_add9.i.i %103 = icmp slt <8 x i32> %102, %.splat4.i.i %104 = select <8 x i1> %103, <8 x i32> %102, <8 x i32> %.splat4.i.i %105 = add nsw <8 x i32> %.splat15.i.i, %104 %106 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %11, <8 x i32> %105, <8 x float> %66, i8 4) %107 = bitcast <8 x i32> %101 to <8 x float> %108 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %107, <8 x float> %106, <8 x float> %67) %109 = bitcast <8 x float> %108 to <8 x i32> %110 = or i32 %loop32.i1, 1 %.splatinsert16.i.i = insertelement <8 x i32> poison, i32 %110, i64 0 %.splat17.i.i = shufflevector <8 x i32> %.splatinsert16.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add18.i.i = add nuw <8 x i32> %.splat17.i.i, %contiguous_add18.i.i.lobit = ashr <8 x i32> %contiguous_add18.i.i, %111 = or <8 x i32> %contiguous_add18.i.i.lobit, %60 %112 = add nsw i32 %55, %110 %113 = sext i32 %112 to i64 %114 = getelementptr inbounds [0 x i32], [0 x i32]* %.unpack, i64 0, i64 %113 %vec_cast19.i.i = bitcast i32* %114 to <8 x i32>* %115 = icmp ne <8 x i32> %111, %116 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast19.i.i, i32 4, <8 x i1> %115, <8 x i32> undef) %117 = icmp sgt <8 x i32> %contiguous_add18.i.i, zeroinitializer %118 = select <8 x i1> %117, <8 x i32> %contiguous_add18.i.i, <8 x i32> zeroinitializer %119 = icmp slt <8 x i32> %118, %.splat4.i.i %120 = select <8 x i1> %119, <8 x i32> %118, <8 x i32> %.splat4.i.i %121 = add nsw <8 x i32> %.splat22.i.i, %120 %122 = icmp ne <8 x i32> %111, zeroinitializer %123 = sext <8 x i1> %122 to <8 x i32> %124 = bitcast <8 x i32> %123 to <8 x float> %125 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %12, <8 x i32> %121, <8 x float> %124, i8 4) %126 = bitcast <8 x i32> %116 to <8 x float> %127 = bitcast <8 x i32> %111 to <8 x float> %128 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %126, <8 x float> %125, <8 x float> %127) %129 = bitcast <8 x float> %128 to <8 x i32> %130 = add nsw i32 %71, %loop32.i1 %131 = add nsw <8 x i32> %97, %109 %132 = add nsw <8 x i32> %131, %129 %133 = sdiv <8 x i32> %132, %19 %134 = sext i32 %130 to i64 %135 = getelementptr inbounds [0 x i32], [0 x i32]* %20, i64 0, i64 %134 %vec_cast23.i.i = bitcast i32* %135 to <8 x i32>* store <8 x i32> %133, <8 x i32>* %vec_cast23.i.i, align 4 %136 = add nuw nsw i32 %loop32.i1, 8 %137 = icmp ult i32 %loop32.i1, 248 br i1 %137, label %branch_true120.i, label %branch_false40.i exit: ; preds = %branch_false14.i, %for_body_591541_parallel_for ret void } define void @for_body_592259_parallel_for(i8* %0, i32 %1, i32 %2) #0 { for_body_592259_parallel_for: %3 = bitcast i8* %0 to { i32, [0 x i8]*, i32, [0 x i32]* }* %4 = load { i32, [0 x i8]*, i32, [0 x i32]* }, { i32, [0 x i8]*, i32, [0 x i32]* }* %3, align 8 %5 = extractvalue { i32, [0 x i8]*, i32, [0 x i32]* } %4, 0 %6 = extractvalue { i32, [0 x i8]*, i32, [0 x i32]* } %4, 1 %7 = extractvalue { i32, [0 x i8]*, i32, [0 x i32]* } %4, 2 %8 = extractvalue { i32, [0 x i8]*, i32, [0 x i32]* } %4, 3 %9 = icmp slt i32 %1, %2 br i1 %9, label %body.preheader, label %exit body.preheader: ; preds = %for_body_592259_parallel_for %10 = add nsw i32 %7, -1 %11 = sdiv i32 %10, 256 %12 = shl nsw i32 %11, 8 %13 = add nsw i32 %12, -256 %14 = sdiv i32 %13, 256 %15 = icmp sgt i32 %7, 512 %16 = add nsw i32 %5, -1 %17 = sdiv i32 %16, 32 %18 = add nsw i32 %7, -1 %.splatinsert1.i.i = insertelement <8 x i32> poison, i32 %18, i64 0 %.splat2.i.i = shufflevector <8 x i32> %.splatinsert1.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %19 = bitcast [0 x i32]* %8 to i8* %20 = bitcast [0 x i32]* %8 to i8* %21 = bitcast [0 x i32]* %8 to i8* %22 = add nsw i32 %5, -1 %23 = sdiv i32 %22, 32 %24 = bitcast [0 x i8]* %6 to [0 x i32]* br label %body body: ; preds = %body.preheader, %for_body_592259.exit %parallel_loop_phi8 = phi i32 [ %127, %for_body_592259.exit ], [ %1, %body.preheader ] br i1 %15, label %branch_true.i.preheader, label %for_body_592259.exit branch_true.i.preheader: ; preds = %body %25 = add i32 %17, %parallel_loop_phi8 %26 = shl i32 %25, 5 %27 = add i32 %23, %parallel_loop_phi8 %28 = shl i32 %27, 5 br label %branch_true.i branch_true.i: ; preds = %branch_true.i.preheader, %branch_false14.i %loop1.i7 = phi i32 [ %32, %branch_false14.i ], [ 0, %branch_true.i.preheader ] %29 = call [0 x i8]* @anydsl_alloc(i32 0, i64 34816) %30 = shl nsw i32 %loop1.i7, 8 %31 = bitcast [0 x i8]* %29 to [0 x i32]* br label %branch_true30.i branch_false14.i: ; preds = %branch_false26.i call void @anydsl_release(i32 0, [0 x i8]* %29) %32 = add nuw nsw i32 %loop1.i7, 1 %33 = icmp slt i32 %32, %14 br i1 %33, label %branch_true.i, label %for_body_592259.exit branch_true16.i: ; preds = %branch_true16.i.preheader, %branch_false26.i %loop11.i6 = phi i32 [ %41, %branch_false26.i ], [ 0, %branch_true16.i.preheader ] %34 = shl nsw i32 %loop11.i6, 8 %35 = shl i32 %loop11.i6, 8 %36 = add i32 %35, 256 %37 = shl i32 %loop11.i6, 8 %38 = add i32 %37, 512 %39 = add nsw i32 %28, %loop11.i6 %40 = mul nsw i32 %39, %7 br label %branch_true28.i branch_false26.i: ; preds = %branch_true28.i %41 = add nuw nsw i32 %loop11.i6, 1 %42 = icmp ult i32 %loop11.i6, 31 br i1 %42, label %branch_true16.i, label %branch_false14.i branch_true28.i: ; preds = %branch_true16.i, %branch_true28.i %loop18.i4 = phi i32 [ 0, %branch_true16.i ], [ %60, %branch_true28.i ] %43 = add nuw nsw i32 %34, %loop18.i4 %44 = zext i32 %43 to i64 %45 = getelementptr inbounds [0 x i32], [0 x i32]* %76, i64 0, i64 %44 %vec_cast.i.i = bitcast i32* %45 to <8 x i32>* %cont_load.i.i = load <8 x i32>, <8 x i32>* %vec_cast.i.i, align 4 %46 = add nsw i32 %36, %loop18.i4 %47 = sext i32 %46 to i64 %48 = getelementptr inbounds [0 x i32], [0 x i32]* %76, i64 0, i64 %47 %vec_cast1.i.i = bitcast i32* %48 to <8 x i32>* %cont_load2.i.i = load <8 x i32>, <8 x i32>* %vec_cast1.i.i, align 4 %49 = add nsw i32 %38, %loop18.i4 %50 = sext i32 %49 to i64 %51 = getelementptr inbounds [0 x i32], [0 x i32]* %76, i64 0, i64 %50 %vec_cast3.i.i = bitcast i32* %51 to <8 x i32>* %cont_load4.i.i = load <8 x i32>, <8 x i32>* %vec_cast3.i.i, align 4 %52 = add nuw nsw i32 %77, %loop18.i4 %53 = add nsw i32 %40, %52 %54 = add nsw i32 %53, 256 %55 = add nsw <8 x i32> %cont_load.i.i, %cont_load2.i.i %56 = add nsw <8 x i32> %55, %cont_load4.i.i %57 = sdiv <8 x i32> %56, %58 = sext i32 %54 to i64 %59 = getelementptr inbounds [0 x i32], [0 x i32]* %24, i64 0, i64 %58 %vec_cast5.i.i = bitcast i32* %59 to <8 x i32>* store <8 x i32> %57, <8 x i32>* %vec_cast5.i.i, align 4 %60 = add nuw nsw i32 %loop18.i4, 8 %61 = icmp ult i32 %loop18.i4, 248 br i1 %61, label %branch_true28.i, label %branch_false26.i branch_true30.i: ; preds = %branch_true.i, %branch_false40.i %loop6.i3 = phi i32 [ -1, %branch_true.i ], [ %74, %branch_false40.i ] %62 = add nsw i32 %26, %loop6.i3 %63 = icmp slt i32 %62, %5 %64 = icmp sgt i32 %62, 0 %65 = mul nsw i32 %62, %7 %cont13.i.i = select i1 %64, i32 %62, i32 0 %66 = icmp slt i32 %cont13.i.i, %16 %cont17.i.i = select i1 %66, i32 %cont13.i.i, i32 %16 %67 = mul nsw i32 %cont17.i.i, %7 %.splatinsert3.i.i = insertelement <8 x i32> poison, i32 %67, i64 0 %.splat4.i.i = shufflevector <8 x i32> %.splatinsert3.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %cont37.i.i = select i1 %64, i32 %62, i32 0 %68 = icmp slt i32 %cont37.i.i, %16 %cont41.i.i = select i1 %68, i32 %cont37.i.i, i32 %16 %69 = mul nsw i32 %cont41.i.i, %7 %.splatinsert10.i.i = insertelement <8 x i32> poison, i32 %69, i64 0 %.splat11.i.i = shufflevector <8 x i32> %.splatinsert10.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %cont61.i.i = select i1 %64, i32 %62, i32 0 %70 = icmp slt i32 %cont61.i.i, %16 %cont65.i.i = select i1 %70, i32 %cont61.i.i, i32 %16 %71 = mul nsw i32 %cont65.i.i, %7 %.splatinsert18.i.i = insertelement <8 x i32> poison, i32 %71, i64 0 %.splat19.i.i = shufflevector <8 x i32> %.splatinsert18.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %72 = shl i32 %loop6.i3, 8 %73 = add i32 %72, 256 br label %branch_true113.i branch_false40.i: ; preds = %_592304_vectorize.exit.i %74 = add nsw i32 %loop6.i3, 1 %75 = icmp slt i32 %loop6.i3, 32 br i1 %75, label %branch_true30.i, label %branch_true16.i.preheader branch_true16.i.preheader: ; preds = %branch_false40.i %76 = bitcast [0 x i8]* %29 to [0 x i32]* %77 = shl nsw i32 %loop1.i7, 8 br label %branch_true16.i branch_true113.i: ; preds = %branch_true30.i, %_592304_vectorize.exit.i %loop32.i1 = phi i32 [ 0, %branch_true30.i ], [ %125, %_592304_vectorize.exit.i ] %78 = add nsw i32 %loop32.i1, -1 %79 = add nsw i32 %30, %78 br i1 %63, label %branch_true18.rv.i.i, label %branch_false2.rv.i.i branch_false2.rv.i.i: ; preds = %branch_true113.i %80 = add nsw i32 %79, 256 %.splatinsert.i.i = insertelement <8 x i32> poison, i32 %80, i64 0 %.splat.i.i = shufflevector <8 x i32> %.splatinsert.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add.i.i = add <8 x i32> %.splat.i.i, %81 = icmp sgt <8 x i32> %contiguous_add.i.i, zeroinitializer %82 = select <8 x i1> %81, <8 x i32> %contiguous_add.i.i, <8 x i32> zeroinitializer %83 = icmp slt <8 x i32> %82, %.splat2.i.i %84 = select <8 x i1> %83, <8 x i32> %82, <8 x i32> %.splat2.i.i %85 = add nsw <8 x i32> %.splat4.i.i, %84 %86 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %19, <8 x i32> %85, <8 x float> , i8 4) %87 = bitcast <8 x float> %86 to <8 x i32> br label %cont19.rv.i.i branch_true18.rv.i.i: ; preds = %branch_true113.i %88 = add nsw i32 %65, %79 %89 = add nsw i32 %88, 256 %90 = sext i32 %89 to i64 %91 = getelementptr inbounds [0 x i32], [0 x i32]* %8, i64 0, i64 %90 %vec_cast.i115.i = bitcast i32* %91 to <8 x i32>* %cont_load.i116.i = load <8 x i32>, <8 x i32>* %vec_cast.i115.i, align 4 br label %cont19.rv.i.i cont19.rv.i.i: ; preds = %branch_true18.rv.i.i, %branch_false2.rv.i.i %cont20_SIMD.i.i = phi <8 x i32> [ %87, %branch_false2.rv.i.i ], [ %cont_load.i116.i, %branch_true18.rv.i.i ] %92 = add nuw nsw i32 %30, %loop32.i1 br i1 %63, label %branch_true42.rv.i.i, label %branch_false25.rv.i.i branch_false25.rv.i.i: ; preds = %cont19.rv.i.i %93 = add nuw nsw i32 %92, 256 %.splatinsert7.i.i = insertelement <8 x i32> poison, i32 %93, i64 0 %.splat8.i.i = shufflevector <8 x i32> %.splatinsert7.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add9.i.i = or <8 x i32> %.splat8.i.i, %94 = icmp sgt <8 x i32> %contiguous_add9.i.i, zeroinitializer %95 = select <8 x i1> %94, <8 x i32> %contiguous_add9.i.i, <8 x i32> zeroinitializer %96 = icmp slt <8 x i32> %95, %.splat2.i.i %97 = select <8 x i1> %96, <8 x i32> %95, <8 x i32> %.splat2.i.i %98 = add nsw <8 x i32> %.splat11.i.i, %97 %99 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %20, <8 x i32> %98, <8 x float> , i8 4) %100 = bitcast <8 x float> %99 to <8 x i32> br label %cont43.rv.i.i branch_true42.rv.i.i: ; preds = %cont19.rv.i.i %101 = add nsw i32 %65, %92 %102 = add nsw i32 %101, 256 %103 = sext i32 %102 to i64 %104 = getelementptr inbounds [0 x i32], [0 x i32]* %8, i64 0, i64 %103 %vec_cast5.i117.i = bitcast i32* %104 to <8 x i32>* %cont_load6.i.i = load <8 x i32>, <8 x i32>* %vec_cast5.i117.i, align 4 br label %cont43.rv.i.i cont43.rv.i.i: ; preds = %branch_true42.rv.i.i, %branch_false25.rv.i.i %cont44_SIMD.i.i = phi <8 x i32> [ %100, %branch_false25.rv.i.i ], [ %cont_load6.i.i, %branch_true42.rv.i.i ] %105 = or i32 %loop32.i1, 1 %106 = add nuw nsw i32 %30, %105 br i1 %63, label %branch_true66.rv.i.i, label %branch_false49.rv.i.i branch_false49.rv.i.i: ; preds = %cont43.rv.i.i %107 = add nuw nsw i32 %106, 256 %.splatinsert15.i.i = insertelement <8 x i32> poison, i32 %107, i64 0 %.splat16.i.i = shufflevector <8 x i32> %.splatinsert15.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add17.i.i = add nuw <8 x i32> %.splat16.i.i, %108 = icmp sgt <8 x i32> %contiguous_add17.i.i, zeroinitializer %109 = select <8 x i1> %108, <8 x i32> %contiguous_add17.i.i, <8 x i32> zeroinitializer %110 = icmp slt <8 x i32> %109, %.splat2.i.i %111 = select <8 x i1> %110, <8 x i32> %109, <8 x i32> %.splat2.i.i %112 = add nsw <8 x i32> %.splat19.i.i, %111 %113 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %21, <8 x i32> %112, <8 x float> , i8 4) %114 = bitcast <8 x float> %113 to <8 x i32> br label %_592304_vectorize.exit.i branch_true66.rv.i.i: ; preds = %cont43.rv.i.i %115 = add nsw i32 %65, %106 %116 = add nsw i32 %115, 256 %117 = sext i32 %116 to i64 %118 = getelementptr inbounds [0 x i32], [0 x i32]* %8, i64 0, i64 %117 %vec_cast12.i.i = bitcast i32* %118 to <8 x i32>* %cont_load13.i.i = load <8 x i32>, <8 x i32>* %vec_cast12.i.i, align 4 br label %_592304_vectorize.exit.i _592304_vectorize.exit.i: ; preds = %branch_true66.rv.i.i, %branch_false49.rv.i.i %cont68_SIMD.i.i = phi <8 x i32> [ %114, %branch_false49.rv.i.i ], [ %cont_load13.i.i, %branch_true66.rv.i.i ] %119 = add nsw i32 %73, %loop32.i1 %120 = add nsw <8 x i32> %cont20_SIMD.i.i, %cont44_SIMD.i.i %121 = add nsw <8 x i32> %120, %cont68_SIMD.i.i %122 = sdiv <8 x i32> %121, %123 = sext i32 %119 to i64 %124 = getelementptr inbounds [0 x i32], [0 x i32]* %31, i64 0, i64 %123 %vec_cast14.i.i = bitcast i32* %124 to <8 x i32>* store <8 x i32> %122, <8 x i32>* %vec_cast14.i.i, align 4 %125 = add nuw nsw i32 %loop32.i1, 8 %126 = icmp ult i32 %loop32.i1, 248 br i1 %126, label %branch_true113.i, label %branch_false40.i for_body_592259.exit: ; preds = %branch_false14.i, %body %127 = add i32 %parallel_loop_phi8, 1 %128 = icmp slt i32 %127, %2 br i1 %128, label %body, label %exit exit: ; preds = %for_body_592259.exit, %for_body_592259_parallel_for ret void } define void @for_body_592953_parallel_for(i8* %0, i32 %1, i32 %2) #0 { for_body_592953_parallel_for: %3 = bitcast i8* %0 to { [0 x i32]*, i32, [0 x i8]*, i32 }* %4 = load { [0 x i32]*, i32, [0 x i8]*, i32 }, { [0 x i32]*, i32, [0 x i8]*, i32 }* %3, align 8 %5 = extractvalue { [0 x i32]*, i32, [0 x i8]*, i32 } %4, 0 %6 = extractvalue { [0 x i32]*, i32, [0 x i8]*, i32 } %4, 1 %7 = extractvalue { [0 x i32]*, i32, [0 x i8]*, i32 } %4, 2 %8 = extractvalue { [0 x i32]*, i32, [0 x i8]*, i32 } %4, 3 %9 = icmp slt i32 %1, %2 br i1 %9, label %body.preheader, label %exit body.preheader: ; preds = %for_body_592953_parallel_for %10 = add nsw i32 %8, -1 %.neg = sdiv i32 %10, -256 %.neg10 = shl i32 %.neg, 8 %11 = add i32 %.neg10, %8 %12 = sdiv i32 %11, 256 %13 = icmp sgt i32 %11, 255 %14 = add nsw i32 %8, -1 %15 = sdiv i32 %14, 256 %.splatinsert1.i.i = insertelement <8 x i32> poison, i32 %8, i64 0 %.splat2.i.i = shufflevector <8 x i32> %.splatinsert1.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %16 = add nsw i32 %6, -1 %17 = sdiv i32 %16, 32 %.splatinsert5.i.i = insertelement <8 x i32> poison, i32 %14, i64 0 %.splat6.i.i = shufflevector <8 x i32> %.splatinsert5.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %18 = bitcast [0 x i32]* %5 to i8* %19 = bitcast [0 x i32]* %5 to i8* %20 = bitcast [0 x i32]* %5 to i8* %21 = add nsw i32 %6, -1 %22 = sdiv i32 %21, 32 %23 = add nsw i32 %8, -1 %24 = sdiv i32 %23, 256 %25 = bitcast [0 x i8]* %7 to [0 x i32]* br label %body body: ; preds = %body.preheader, %for_body_592953.exit %parallel_loop_phi8 = phi i32 [ %160, %for_body_592953.exit ], [ %1, %body.preheader ] br i1 %13, label %branch_true.i.preheader, label %for_body_592953.exit branch_true.i.preheader: ; preds = %body %26 = add i32 %17, %parallel_loop_phi8 %27 = shl i32 %26, 5 %28 = add i32 %22, %parallel_loop_phi8 %29 = shl i32 %28, 5 br label %branch_true.i branch_true.i: ; preds = %branch_true.i.preheader, %branch_false14.i %loop1.i7 = phi i32 [ %36, %branch_false14.i ], [ 0, %branch_true.i.preheader ] %30 = call [0 x i8]* @anydsl_alloc(i32 0, i64 34816) %31 = add i32 %15, %loop1.i7 %32 = shl i32 %31, 8 %33 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> , <8 x float> , <8 x float> ) %34 = bitcast <8 x float> %33 to <8 x i32> %35 = bitcast [0 x i8]* %30 to [0 x i32]* br label %branch_true30.i branch_false14.i: ; preds = %branch_false26.i call void @anydsl_release(i32 0, [0 x i8]* %30) %36 = add nuw nsw i32 %loop1.i7, 1 %37 = icmp slt i32 %36, %12 br i1 %37, label %branch_true.i, label %for_body_592953.exit branch_true16.i: ; preds = %branch_true16.i.preheader, %branch_false26.i %loop11.i6 = phi i32 [ %45, %branch_false26.i ], [ 0, %branch_true16.i.preheader ] %38 = shl nsw i32 %loop11.i6, 8 %39 = shl i32 %loop11.i6, 8 %40 = add i32 %39, 256 %41 = shl i32 %loop11.i6, 8 %42 = add i32 %41, 512 %43 = add nsw i32 %29, %loop11.i6 %44 = mul nsw i32 %43, %8 br label %branch_true28.i branch_false26.i: ; preds = %branch_true28.i %45 = add nuw nsw i32 %loop11.i6, 1 %46 = icmp ult i32 %loop11.i6, 31 br i1 %46, label %branch_true16.i, label %branch_false14.i branch_true28.i: ; preds = %branch_true16.i, %branch_true28.i %loop18.i4 = phi i32 [ 0, %branch_true16.i ], [ %63, %branch_true28.i ] %47 = add nuw nsw i32 %38, %loop18.i4 %48 = zext i32 %47 to i64 %49 = getelementptr inbounds [0 x i32], [0 x i32]* %85, i64 0, i64 %48 %vec_cast.i.i = bitcast i32* %49 to <8 x i32>* %cont_load.i.i = load <8 x i32>, <8 x i32>* %vec_cast.i.i, align 4 %50 = add nsw i32 %40, %loop18.i4 %51 = sext i32 %50 to i64 %52 = getelementptr inbounds [0 x i32], [0 x i32]* %85, i64 0, i64 %51 %vec_cast1.i.i = bitcast i32* %52 to <8 x i32>* %cont_load2.i.i = load <8 x i32>, <8 x i32>* %vec_cast1.i.i, align 4 %53 = add nsw i32 %42, %loop18.i4 %54 = sext i32 %53 to i64 %55 = getelementptr inbounds [0 x i32], [0 x i32]* %85, i64 0, i64 %54 %vec_cast3.i.i = bitcast i32* %55 to <8 x i32>* %cont_load4.i.i = load <8 x i32>, <8 x i32>* %vec_cast3.i.i, align 4 %56 = add nsw i32 %87, %loop18.i4 %57 = add nsw i32 %44, %56 %58 = add nsw <8 x i32> %cont_load.i.i, %cont_load2.i.i %59 = add nsw <8 x i32> %58, %cont_load4.i.i %60 = sdiv <8 x i32> %59, %61 = sext i32 %57 to i64 %62 = getelementptr inbounds [0 x i32], [0 x i32]* %25, i64 0, i64 %61 %vec_cast5.i.i = bitcast i32* %62 to <8 x i32>* store <8 x i32> %60, <8 x i32>* %vec_cast5.i.i, align 4 %63 = add nuw nsw i32 %loop18.i4, 8 %64 = icmp ult i32 %loop18.i4, 248 br i1 %64, label %branch_true28.i, label %branch_false26.i branch_true30.i: ; preds = %branch_true.i, %branch_false40.i %loop6.i3 = phi i32 [ -1, %branch_true.i ], [ %83, %branch_false40.i ] %65 = add nsw i32 %27, %loop6.i3 %66 = icmp slt i32 %65, %6 %67 = sext i1 %66 to i32 %68 = insertelement <8 x i32> poison, i32 %67, i64 0 %69 = shufflevector <8 x i32> %68, <8 x i32> poison, <8 x i32> zeroinitializer %70 = icmp sgt i32 %65, 0 %71 = mul nsw i32 %65, %8 %cont14.i.i = select i1 %70, i32 %65, i32 0 %72 = icmp slt i32 %cont14.i.i, %16 %cont18.i.i = select i1 %72, i32 %cont14.i.i, i32 %16 %73 = mul nsw i32 %cont18.i.i, %8 %.splatinsert7.i.i = insertelement <8 x i32> poison, i32 %73, i64 0 %.splat8.i.i = shufflevector <8 x i32> %.splatinsert7.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %.not78.i.i = xor i1 %66, true %74 = sext i1 %.not78.i.i to i32 %75 = insertelement <8 x i32> poison, i32 %74, i64 0 %76 = shufflevector <8 x i32> %75, <8 x i32> poison, <8 x i32> zeroinitializer %cont41.i.i = select i1 %70, i32 %65, i32 0 %77 = icmp slt i32 %cont41.i.i, %16 %cont45.i.i = select i1 %77, i32 %cont41.i.i, i32 %16 %78 = mul nsw i32 %cont45.i.i, %8 %.splatinsert16.i.i = insertelement <8 x i32> poison, i32 %78, i64 0 %.splat17.i.i = shufflevector <8 x i32> %.splatinsert16.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %cont68.i.i = select i1 %70, i32 %65, i32 0 %79 = icmp slt i32 %cont68.i.i, %16 %cont72.i.i = select i1 %79, i32 %cont68.i.i, i32 %16 %80 = mul nsw i32 %cont72.i.i, %8 %.splatinsert23.i.i = insertelement <8 x i32> poison, i32 %80, i64 0 %.splat24.i.i = shufflevector <8 x i32> %.splatinsert23.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %81 = shl i32 %loop6.i3, 8 %82 = add i32 %81, 256 br label %branch_true120.i branch_false40.i: ; preds = %branch_true120.i %83 = add nsw i32 %loop6.i3, 1 %84 = icmp slt i32 %loop6.i3, 32 br i1 %84, label %branch_true30.i, label %branch_true16.i.preheader branch_true16.i.preheader: ; preds = %branch_false40.i %85 = bitcast [0 x i8]* %30 to [0 x i32]* %86 = add i32 %24, %loop1.i7 %87 = shl i32 %86, 8 br label %branch_true16.i branch_true120.i: ; preds = %branch_true30.i, %branch_true120.i %loop32.i1 = phi i32 [ 0, %branch_true30.i ], [ %158, %branch_true120.i ] %88 = add nsw i32 %loop32.i1, -1 %89 = add nsw i32 %32, %88 %.splatinsert.i.i = insertelement <8 x i32> poison, i32 %89, i64 0 %.splat.i.i = shufflevector <8 x i32> %.splatinsert.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add.i.i = add <8 x i32> %.splat.i.i, %90 = icmp slt <8 x i32> %contiguous_add.i.i, %.splat2.i.i %91 = select <8 x i1> %90, <8 x i32> %69, <8 x i32> zeroinitializer %92 = xor <8 x i32> %91, %93 = icmp sgt <8 x i32> %contiguous_add.i.i, zeroinitializer %94 = select <8 x i1> %93, <8 x i32> %contiguous_add.i.i, <8 x i32> zeroinitializer %95 = icmp slt <8 x i32> %94, %.splat6.i.i %96 = select <8 x i1> %95, <8 x i32> %94, <8 x i32> %.splat6.i.i %97 = add nsw <8 x i32> %.splat8.i.i, %96 %98 = icmp ne <8 x i32> %91, %99 = sext <8 x i1> %98 to <8 x i32> %100 = bitcast <8 x i32> %99 to <8 x float> %101 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %18, <8 x i32> %97, <8 x float> %100, i8 4) %102 = add nsw i32 %71, %89 %103 = sext i32 %102 to i64 %104 = getelementptr inbounds [0 x i32], [0 x i32]* %5, i64 0, i64 %103 %vec_cast.i122.i = bitcast i32* %104 to <8 x i32>* %105 = icmp ne <8 x i32> %91, zeroinitializer %106 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast.i122.i, i32 4, <8 x i1> %105, <8 x i32> undef) %107 = bitcast <8 x i32> %106 to <8 x float> %108 = bitcast <8 x i32> %92 to <8 x float> %109 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %107, <8 x float> %101, <8 x float> %108) %110 = bitcast <8 x float> %109 to <8 x i32> %111 = add nsw i32 %32, %loop32.i1 %.splatinsert9.i.i = insertelement <8 x i32> poison, i32 %111, i64 0 %.splat10.i.i = shufflevector <8 x i32> %.splatinsert9.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add11.i.i = or <8 x i32> %.splat10.i.i, %.not = icmp slt <8 x i32> %contiguous_add11.i.i, %.splat2.i.i %112 = select <8 x i1> %.not, <8 x i32> %76, <8 x i32> %113 = add nsw i32 %71, %111 %114 = sext i32 %113 to i64 %115 = getelementptr inbounds [0 x i32], [0 x i32]* %5, i64 0, i64 %114 %vec_cast14.i.i = bitcast i32* %115 to <8 x i32>* %116 = icmp ne <8 x i32> %112, %117 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast14.i.i, i32 4, <8 x i1> %116, <8 x i32> undef) %118 = icmp sgt <8 x i32> %contiguous_add11.i.i, zeroinitializer %119 = select <8 x i1> %118, <8 x i32> %contiguous_add11.i.i, <8 x i32> zeroinitializer %120 = icmp slt <8 x i32> %119, %.splat6.i.i %121 = select <8 x i1> %120, <8 x i32> %119, <8 x i32> %.splat6.i.i %122 = add nsw <8 x i32> %.splat17.i.i, %121 %123 = icmp ne <8 x i32> %112, zeroinitializer %124 = sext <8 x i1> %123 to <8 x i32> %125 = bitcast <8 x i32> %124 to <8 x float> %126 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %19, <8 x i32> %122, <8 x float> %125, i8 4) %127 = bitcast <8 x i32> %117 to <8 x float> %128 = bitcast <8 x i32> %112 to <8 x float> %129 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %127, <8 x float> %126, <8 x float> %128) %130 = bitcast <8 x float> %129 to <8 x i32> %131 = or i32 %loop32.i1, 1 %132 = add nsw i32 %32, %131 %.splatinsert18.i.i = insertelement <8 x i32> poison, i32 %132, i64 0 %.splat19.i.i = shufflevector <8 x i32> %.splatinsert18.i.i, <8 x i32> poison, <8 x i32> zeroinitializer %contiguous_add20.i.i = add <8 x i32> %.splat19.i.i, %.not11 = icmp slt <8 x i32> %contiguous_add20.i.i, %.splat2.i.i %133 = select <8 x i1> %.not11, <8 x i32> %76, <8 x i32> %134 = add nsw i32 %71, %132 %135 = sext i32 %134 to i64 %136 = getelementptr inbounds [0 x i32], [0 x i32]* %5, i64 0, i64 %135 %vec_cast21.i.i = bitcast i32* %136 to <8 x i32>* %137 = icmp ne <8 x i32> %133, %138 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %vec_cast21.i.i, i32 4, <8 x i1> %137, <8 x i32> undef) %139 = icmp sgt <8 x i32> %contiguous_add20.i.i, zeroinitializer %140 = select <8 x i1> %139, <8 x i32> %contiguous_add20.i.i, <8 x i32> zeroinitializer %141 = icmp slt <8 x i32> %140, %.splat6.i.i %142 = select <8 x i1> %141, <8 x i32> %140, <8 x i32> %.splat6.i.i %143 = add nsw <8 x i32> %.splat24.i.i, %142 %144 = icmp ne <8 x i32> %133, zeroinitializer %145 = sext <8 x i1> %144 to <8 x i32> %146 = bitcast <8 x i32> %145 to <8 x float> %147 = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> undef, i8* %20, <8 x i32> %143, <8 x float> %146, i8 4) %148 = bitcast <8 x i32> %138 to <8 x float> %149 = bitcast <8 x i32> %133 to <8 x float> %150 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %148, <8 x float> %147, <8 x float> %149) %151 = bitcast <8 x float> %150 to <8 x i32> %152 = add nsw i32 %82, %loop32.i1 %153 = add nsw <8 x i32> %110, %130 %154 = add nsw <8 x i32> %153, %151 %155 = sdiv <8 x i32> %154, %34 %156 = sext i32 %152 to i64 %157 = getelementptr inbounds [0 x i32], [0 x i32]* %35, i64 0, i64 %156 %vec_cast25.i.i = bitcast i32* %157 to <8 x i32>* store <8 x i32> %155, <8 x i32>* %vec_cast25.i.i, align 4 %158 = add nuw nsw i32 %loop32.i1, 8 %159 = icmp ult i32 %loop32.i1, 248 br i1 %159, label %branch_true120.i, label %branch_false40.i for_body_592953.exit: ; preds = %branch_false14.i, %body %160 = add i32 %parallel_loop_phi8, 1 %161 = icmp slt i32 %160, %2 br i1 %161, label %body, label %exit exit: ; preds = %for_body_592953.exit, %for_body_592953_parallel_for ret void } ; Function Attrs: nounwind readonly declare <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float>, i8*, <8 x i32>, <8 x float>, i8 immarg) #1 ; Function Attrs: argmemonly nofree nosync nounwind readonly willreturn declare <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>*, i32 immarg, <8 x i1>, <8 x i32>) #2 ; Function Attrs: nounwind readnone declare <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float>, <8 x float>, <8 x float>) #3 ; Function Attrs: nounwind readnone declare i32 @llvm.x86.avx.ptestz.256(<4 x i64>, <4 x i64>) #3 ; Function Attrs: nounwind readnone declare i32 @llvm.x86.avx.ptestc.256(<4 x i64>, <4 x i64>) #3 attributes #0 = { "target-cpu"="skylake" "target-features"="-avx512pf,-tsxldtrk,+cx16,+sahf,-tbm,-avx512ifma,-sha,+crc32,-fma4,-vpclmulqdq,+prfchw,+bmi2,-cldemote,+fsgsbase,-ptwrite,-amx-tile,-uintr,-gfni,+popcnt,-widekl,+aes,-avx512bitalg,-movdiri,+xsaves,-avx512er,-avxvnni,-avx512fp16,-avx512vnni,-amx-bf16,-avx512vpopcntdq,-pconfig,-clwb,-avx512f,+xsavec,-clzero,+pku,+mmx,-lwp,-rdpid,-xop,+rdseed,-waitpkg,-kl,-movdir64b,-sse4a,-avx512bw,+clflushopt,+xsave,-avx512vbmi2,+64bit,-avx512vl,-serialize,-hreset,+invpcid,-avx512cd,+avx,-vaes,-avx512bf16,+cx8,+fma,-rtm,+bmi,-enqcmd,+rdrnd,-mwaitx,+sse4.1,+sse4.2,+avx2,+fxsr,-wbnoinvd,+sse,+lzcnt,+pclmul,-prefetchwt1,+f16c,+ssse3,+sgx,-shstk,+cmov,-avx512vbmi,-amx-int8,+movbe,-avx512vp2intersect,+xsaveopt,-avx512dq,+sse2,+adx,+sse3," } attributes #1 = { nounwind readonly } attributes #2 = { argmemonly nofree nosync nounwind readonly willreturn } attributes #3 = { nounwind readnone }