llvmpy/test/loopvectorize.ll

369 lines
11 KiB
LLVM

; ModuleID = 'loopvectorize.c'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
;target triple = "x86_64-apple-macosx10.8.0"
target triple = "x86-64-unknown-linux-gnu"
define void @ex1(float* %A, float* %B, float %K, i32 %start, i32 %end) nounwind uwtable ssp {
%1 = alloca float*, align 8
%2 = alloca float*, align 8
%3 = alloca float, align 4
%4 = alloca i32, align 4
%5 = alloca i32, align 4
%i = alloca i32, align 4
store float* %A, float** %1, align 8
store float* %B, float** %2, align 8
store float %K, float* %3, align 4
store i32 %start, i32* %4, align 4
store i32 %end, i32* %5, align 4
%6 = load i32* %4, align 4
store i32 %6, i32* %i, align 4
br label %7
; <label>:7 ; preds = %25, %0
%8 = load i32* %i, align 4
%9 = load i32* %5, align 4
%10 = icmp slt i32 %8, %9
br i1 %10, label %11, label %28
; <label>:11 ; preds = %7
%12 = load i32* %i, align 4
%13 = sext i32 %12 to i64
%14 = load float** %2, align 8
%15 = getelementptr inbounds float* %14, i64 %13
%16 = load float* %15, align 4
%17 = load float* %3, align 4
%18 = fadd float %16, %17
%19 = load i32* %i, align 4
%20 = sext i32 %19 to i64
%21 = load float** %1, align 8
%22 = getelementptr inbounds float* %21, i64 %20
%23 = load float* %22, align 4
%24 = fmul float %23, %18
store float %24, float* %22, align 4
br label %25
; <label>:25 ; preds = %11
%26 = load i32* %i, align 4
%27 = add nsw i32 %26, 1
store i32 %27, i32* %i, align 4
br label %7
; <label>:28 ; preds = %7
ret void
}
define void @ex2(float* %A, float* %B, float %K, i32 %n) nounwind uwtable ssp {
%1 = alloca float*, align 8
%2 = alloca float*, align 8
%3 = alloca float, align 4
%4 = alloca i32, align 4
%i = alloca i32, align 4
store float* %A, float** %1, align 8
store float* %B, float** %2, align 8
store float %K, float* %3, align 4
store i32 %n, i32* %4, align 4
store i32 0, i32* %i, align 4
br label %5
; <label>:5 ; preds = %23, %0
%6 = load i32* %i, align 4
%7 = load i32* %4, align 4
%8 = icmp slt i32 %6, %7
br i1 %8, label %9, label %26
; <label>:9 ; preds = %5
%10 = load i32* %i, align 4
%11 = sext i32 %10 to i64
%12 = load float** %2, align 8
%13 = getelementptr inbounds float* %12, i64 %11
%14 = load float* %13, align 4
%15 = load float* %3, align 4
%16 = fadd float %14, %15
%17 = load i32* %i, align 4
%18 = sext i32 %17 to i64
%19 = load float** %1, align 8
%20 = getelementptr inbounds float* %19, i64 %18
%21 = load float* %20, align 4
%22 = fmul float %21, %16
store float %22, float* %20, align 4
br label %23
; <label>:23 ; preds = %9
%24 = load i32* %i, align 4
%25 = add nsw i32 %24, 1
store i32 %25, i32* %i, align 4
br label %5
; <label>:26 ; preds = %5
ret void
}
define i32 @ex3(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp {
%1 = alloca i32*, align 8
%2 = alloca i32*, align 8
%3 = alloca i32, align 4
%sum = alloca i32, align 4
%i = alloca i32, align 4
store i32* %A, i32** %1, align 8
store i32* %B, i32** %2, align 8
store i32 %n, i32* %3, align 4
store i32 0, i32* %sum, align 4
store i32 0, i32* %i, align 4
br label %4
; <label>:4 ; preds = %17, %0
%5 = load i32* %i, align 4
%6 = load i32* %3, align 4
%7 = icmp slt i32 %5, %6
br i1 %7, label %8, label %20
; <label>:8 ; preds = %4
%9 = load i32* %i, align 4
%10 = sext i32 %9 to i64
%11 = load i32** %1, align 8
%12 = getelementptr inbounds i32* %11, i64 %10
%13 = load i32* %12, align 4
%14 = add nsw i32 %13, 5
%15 = load i32* %sum, align 4
%16 = add i32 %15, %14
store i32 %16, i32* %sum, align 4
br label %17
; <label>:17 ; preds = %8
%18 = load i32* %i, align 4
%19 = add nsw i32 %18, 1
store i32 %19, i32* %i, align 4
br label %4
; <label>:20 ; preds = %4
%21 = load i32* %sum, align 4
ret i32 %21
}
define void @ex4(float* %A, float* %B, float %K, i32 %n) nounwind uwtable ssp {
%1 = alloca float*, align 8
%2 = alloca float*, align 8
%3 = alloca float, align 4
%4 = alloca i32, align 4
%i = alloca i32, align 4
store float* %A, float** %1, align 8
store float* %B, float** %2, align 8
store float %K, float* %3, align 4
store i32 %n, i32* %4, align 4
store i32 0, i32* %i, align 4
br label %5
; <label>:5 ; preds = %16, %0
%6 = load i32* %i, align 4
%7 = load i32* %4, align 4
%8 = icmp slt i32 %6, %7
br i1 %8, label %9, label %19
; <label>:9 ; preds = %5
%10 = load i32* %i, align 4
%11 = sitofp i32 %10 to float
%12 = load i32* %i, align 4
%13 = sext i32 %12 to i64
%14 = load float** %1, align 8
%15 = getelementptr inbounds float* %14, i64 %13
store float %11, float* %15, align 4
br label %16
; <label>:16 ; preds = %9
%17 = load i32* %i, align 4
%18 = add nsw i32 %17, 1
store i32 %18, i32* %i, align 4
br label %5
; <label>:19 ; preds = %5
ret void
}
define i32 @ex5(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp {
%1 = alloca i32*, align 8
%2 = alloca i32*, align 8
%3 = alloca i32, align 4
%sum = alloca i32, align 4
%i = alloca i32, align 4
store i32* %A, i32** %1, align 8
store i32* %B, i32** %2, align 8
store i32 %n, i32* %3, align 4
store i32 0, i32* %sum, align 4
store i32 0, i32* %i, align 4
br label %4
; <label>:4 ; preds = %30, %0
%5 = load i32* %i, align 4
%6 = load i32* %3, align 4
%7 = icmp slt i32 %5, %6
br i1 %7, label %8, label %33
; <label>:8 ; preds = %4
%9 = load i32* %i, align 4
%10 = sext i32 %9 to i64
%11 = load i32** %1, align 8
%12 = getelementptr inbounds i32* %11, i64 %10
%13 = load i32* %12, align 4
%14 = load i32* %i, align 4
%15 = sext i32 %14 to i64
%16 = load i32** %2, align 8
%17 = getelementptr inbounds i32* %16, i64 %15
%18 = load i32* %17, align 4
%19 = icmp sgt i32 %13, %18
br i1 %19, label %20, label %29
; <label>:20 ; preds = %8
%21 = load i32* %i, align 4
%22 = sext i32 %21 to i64
%23 = load i32** %1, align 8
%24 = getelementptr inbounds i32* %23, i64 %22
%25 = load i32* %24, align 4
%26 = add nsw i32 %25, 5
%27 = load i32* %sum, align 4
%28 = add i32 %27, %26
store i32 %28, i32* %sum, align 4
br label %29
; <label>:29 ; preds = %20, %8
br label %30
; <label>:30 ; preds = %29
%31 = load i32* %i, align 4
%32 = add nsw i32 %31, 1
store i32 %32, i32* %i, align 4
br label %4
; <label>:33 ; preds = %4
%34 = load i32* %sum, align 4
ret i32 %34
}
define void @ex6(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp {
%1 = alloca i32*, align 8
%2 = alloca i32*, align 8
%3 = alloca i32, align 4
%i = alloca i32, align 4
store i32* %A, i32** %1, align 8
store i32* %B, i32** %2, align 8
store i32 %n, i32* %3, align 4
%4 = load i32* %3, align 4
store i32 %4, i32* %i, align 4
br label %5
; <label>:5 ; preds = %15, %0
%6 = load i32* %i, align 4
%7 = icmp sgt i32 %6, 0
br i1 %7, label %8, label %18
; <label>:8 ; preds = %5
%9 = load i32* %i, align 4
%10 = sext i32 %9 to i64
%11 = load i32** %1, align 8
%12 = getelementptr inbounds i32* %11, i64 %10
%13 = load i32* %12, align 4
%14 = add nsw i32 %13, 1
store i32 %14, i32* %12, align 4
br label %15
; <label>:15 ; preds = %8
%16 = load i32* %i, align 4
%17 = add nsw i32 %16, -1
store i32 %17, i32* %i, align 4
br label %5
; <label>:18 ; preds = %5
ret void
}
define void @ex7(i32* %A, i32* %B, i32 %n, i32 %k) nounwind uwtable ssp {
%1 = alloca i32*, align 8
%2 = alloca i32*, align 8
%3 = alloca i32, align 4
%4 = alloca i32, align 4
%i = alloca i32, align 4
store i32* %A, i32** %1, align 8
store i32* %B, i32** %2, align 8
store i32 %n, i32* %3, align 4
store i32 %k, i32* %4, align 4
store i32 0, i32* %i, align 4
br label %5
; <label>:5 ; preds = %24, %0
%6 = load i32* %i, align 4
%7 = load i32* %3, align 4
%8 = icmp slt i32 %6, %7
br i1 %8, label %9, label %27
; <label>:9 ; preds = %5
%10 = load i32* %i, align 4
%11 = load i32* %4, align 4
%12 = mul nsw i32 %10, %11
%13 = sext i32 %12 to i64
%14 = load i32** %2, align 8
%15 = getelementptr inbounds i32* %14, i64 %13
%16 = load i32* %15, align 4
%17 = load i32* %i, align 4
%18 = mul nsw i32 %17, 7
%19 = sext i32 %18 to i64
%20 = load i32** %1, align 8
%21 = getelementptr inbounds i32* %20, i64 %19
%22 = load i32* %21, align 4
%23 = add nsw i32 %22, %16
store i32 %23, i32* %21, align 4
br label %24
; <label>:24 ; preds = %9
%25 = load i32* %i, align 4
%26 = add nsw i32 %25, 1
store i32 %26, i32* %i, align 4
br label %5
; <label>:27 ; preds = %5
ret void
}
define void @ex8(i32* %A, i8* %B, i32 %n, i32 %k) nounwind uwtable ssp {
%1 = alloca i32*, align 8
%2 = alloca i8*, align 8
%3 = alloca i32, align 4
%4 = alloca i32, align 4
%i = alloca i32, align 4
store i32* %A, i32** %1, align 8
store i8* %B, i8** %2, align 8
store i32 %n, i32* %3, align 4
store i32 %k, i32* %4, align 4
store i32 0, i32* %i, align 4
br label %5
; <label>:5 ; preds = %23, %0
%6 = load i32* %i, align 4
%7 = load i32* %3, align 4
%8 = icmp slt i32 %6, %7
br i1 %8, label %9, label %26
; <label>:9 ; preds = %5
%10 = load i32* %i, align 4
%11 = sext i32 %10 to i64
%12 = load i8** %2, align 8
%13 = getelementptr inbounds i8* %12, i64 %11
%14 = load i8* %13, align 1
%15 = sext i8 %14 to i32
%16 = mul nsw i32 4, %15
%17 = load i32* %i, align 4
%18 = sext i32 %17 to i64
%19 = load i32** %1, align 8
%20 = getelementptr inbounds i32* %19, i64 %18
%21 = load i32* %20, align 4
%22 = add nsw i32 %21, %16
store i32 %22, i32* %20, align 4
br label %23
; <label>:23 ; preds = %9
%24 = load i32* %i, align 4
%25 = add nsw i32 %24, 1
store i32 %25, i32* %i, align 4
br label %5
; <label>:26 ; preds = %5
ret void
}