From 828724f5934ac37c1911c8d37e06e6ceca969faf Mon Sep 17 00:00:00 2001 From: Dmitry Atamanov Date: Thu, 14 Apr 2022 12:55:11 +0500 Subject: [PATCH] Add more vector tests (#430) * Add more vector tests * Added .ll output. Co-authored-by: Christoffer Lerno --- test/test_suite/vector/vector_ops.c3t | 410 ++++++++++++++++++++++-- test/test_suite/vector/vector_ops2.c3t | 418 +++++++++++++++++++++++-- 2 files changed, 788 insertions(+), 40 deletions(-) diff --git a/test/test_suite/vector/vector_ops.c3t b/test/test_suite/vector/vector_ops.c3t index a3fe5a924..41e8c39f4 100644 --- a/test/test_suite/vector/vector_ops.c3t +++ b/test/test_suite/vector/vector_ops.c3t @@ -15,11 +15,34 @@ fn void testf() libc::printf("%f %f %f %f\n", w[0], w[1], w[2], w[3]); int[<4>] ww = y < z; libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y <= z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y > z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y >= z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y == z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y != z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); } fn void testb() { - bool[<4>] d = { true, false, true, true }; + bool[<4>] y = { true, false, true, true }; + bool[<4>] z = { false, false, true, true }; + ichar[<4>] ww = y < z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y <= z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y > z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y >= z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y == z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y != z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); } fn void testi() @@ -40,9 +63,29 @@ fn void testi() libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); w = z > y; libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z >= y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z < y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z <= y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z == y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z != y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); uint[<4>] uz = { 2, 6, 2, 1 }; w = uz > y; libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz >= y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz < y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz <= y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz == y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz != y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); } fn void main() @@ -145,14 +188,195 @@ entry: %53 = load <4 x i32>, <4 x i32>* %ww, align 16 %54 = extractelement <4 x i32> %53, i64 3 %55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i32 0, i32 0), i32 %48, i32 %50, i32 %52, i32 %54) + %56 = load <4 x float>, <4 x float>* %y, align 16 + %57 = load <4 x float>, <4 x float>* %z, align 16 + %le = fcmp ole <4 x float> %56, %57 + %58 = sext <4 x i1> %le to <4 x i32> + store <4 x i32> %58, <4 x i32>* %ww, align 16 + %59 = load <4 x i32>, <4 x i32>* %ww, align 16 + %60 = extractelement <4 x i32> %59, i64 0 + %61 = load <4 x i32>, <4 x i32>* %ww, align 16 + %62 = extractelement <4 x i32> %61, i64 1 + %63 = load <4 x i32>, <4 x i32>* %ww, align 16 + %64 = extractelement <4 x i32> %63, i64 2 + %65 = load <4 x i32>, <4 x i32>* %ww, align 16 + %66 = extractelement <4 x i32> %65, i64 3 + %67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.5, i32 0, i32 0), i32 %60, i32 %62, i32 %64, i32 %66) + %68 = load <4 x float>, <4 x float>* %y, align 16 + %69 = load <4 x float>, <4 x float>* %z, align 16 + %gt = fcmp ogt <4 x float> %68, %69 + %70 = sext <4 x i1> %gt to <4 x i32> + store <4 x i32> %70, <4 x i32>* %ww, align 16 + %71 = load <4 x i32>, <4 x i32>* %ww, align 16 + %72 = extractelement <4 x i32> %71, i64 0 + %73 = load <4 x i32>, <4 x i32>* %ww, align 16 + %74 = extractelement <4 x i32> %73, i64 1 + %75 = load <4 x i32>, <4 x i32>* %ww, align 16 + %76 = extractelement <4 x i32> %75, i64 2 + %77 = load <4 x i32>, <4 x i32>* %ww, align 16 + %78 = extractelement <4 x i32> %77, i64 3 + %79 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.6, i32 0, i32 0), i32 %72, i32 %74, i32 %76, i32 %78) + %80 = load <4 x float>, <4 x float>* %y, align 16 + %81 = load <4 x float>, <4 x float>* %z, align 16 + %ge = fcmp oge <4 x float> %80, %81 + %82 = sext <4 x i1> %ge to <4 x i32> + store <4 x i32> %82, <4 x i32>* %ww, align 16 + %83 = load <4 x i32>, <4 x i32>* %ww, align 16 + %84 = extractelement <4 x i32> %83, i64 0 + %85 = load <4 x i32>, <4 x i32>* %ww, align 16 + %86 = extractelement <4 x i32> %85, i64 1 + %87 = load <4 x i32>, <4 x i32>* %ww, align 16 + %88 = extractelement <4 x i32> %87, i64 2 + %89 = load <4 x i32>, <4 x i32>* %ww, align 16 + %90 = extractelement <4 x i32> %89, i64 3 + %91 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.7, i32 0, i32 0), i32 %84, i32 %86, i32 %88, i32 %90) + %92 = load <4 x float>, <4 x float>* %y, align 16 + %93 = load <4 x float>, <4 x float>* %z, align 16 + %eq = fcmp oeq <4 x float> %92, %93 + %94 = sext <4 x i1> %eq to <4 x i32> + store <4 x i32> %94, <4 x i32>* %ww, align 16 + %95 = load <4 x i32>, <4 x i32>* %ww, align 16 + %96 = extractelement <4 x i32> %95, i64 0 + %97 = load <4 x i32>, <4 x i32>* %ww, align 16 + %98 = extractelement <4 x i32> %97, i64 1 + %99 = load <4 x i32>, <4 x i32>* %ww, align 16 + %100 = extractelement <4 x i32> %99, i64 2 + %101 = load <4 x i32>, <4 x i32>* %ww, align 16 + %102 = extractelement <4 x i32> %101, i64 3 + %103 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i32 0, i32 0), i32 %96, i32 %98, i32 %100, i32 %102) + %104 = load <4 x float>, <4 x float>* %y, align 16 + %105 = load <4 x float>, <4 x float>* %z, align 16 + %neq = fcmp one <4 x float> %104, %105 + %106 = sext <4 x i1> %neq to <4 x i32> + store <4 x i32> %106, <4 x i32>* %ww, align 16 + %107 = load <4 x i32>, <4 x i32>* %ww, align 16 + %108 = extractelement <4 x i32> %107, i64 0 + %109 = load <4 x i32>, <4 x i32>* %ww, align 16 + %110 = extractelement <4 x i32> %109, i64 1 + %111 = load <4 x i32>, <4 x i32>* %ww, align 16 + %112 = extractelement <4 x i32> %111, i64 2 + %113 = load <4 x i32>, <4 x i32>* %ww, align 16 + %114 = extractelement <4 x i32> %113, i64 3 + %115 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i32 0, i32 0), i32 %108, i32 %110, i32 %112, i32 %114) ret void } ; Function Attrs: nounwind define void @vector_ops.testb() #0 { entry: - %d = alloca <4 x i8>, align 4 - store <4 x i8> , <4 x i8>* %d, align 4 + %y = alloca <4 x i8>, align 4 + %z = alloca <4 x i8>, align 4 + %ww = alloca <4 x i8>, align 4 + store <4 x i8> , <4 x i8>* %y, align 4 + store <4 x i8> , <4 x i8>* %z, align 4 + %0 = load <4 x i8>, <4 x i8>* %y, align 4 + %1 = load <4 x i8>, <4 x i8>* %z, align 4 + %lt = icmp ult <4 x i8> %0, %1 + %2 = sext <4 x i1> %lt to <4 x i8> + store <4 x i8> %2, <4 x i8>* %ww, align 4 + %3 = load <4 x i8>, <4 x i8>* %ww, align 4 + %4 = extractelement <4 x i8> %3, i64 0 + %sisiext = sext i8 %4 to i32 + %5 = load <4 x i8>, <4 x i8>* %ww, align 4 + %6 = extractelement <4 x i8> %5, i64 1 + %sisiext1 = sext i8 %6 to i32 + %7 = load <4 x i8>, <4 x i8>* %ww, align 4 + %8 = extractelement <4 x i8> %7, i64 2 + %sisiext2 = sext i8 %8 to i32 + %9 = load <4 x i8>, <4 x i8>* %ww, align 4 + %10 = extractelement <4 x i8> %9, i64 3 + %sisiext3 = sext i8 %10 to i32 + %11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i32 0, i32 0), i32 %sisiext, i32 %sisiext1, i32 %sisiext2, i32 %sisiext3) + %12 = load <4 x i8>, <4 x i8>* %y, align 4 + %13 = load <4 x i8>, <4 x i8>* %z, align 4 + %le = icmp ule <4 x i8> %12, %13 + %14 = sext <4 x i1> %le to <4 x i8> + store <4 x i8> %14, <4 x i8>* %ww, align 4 + %15 = load <4 x i8>, <4 x i8>* %ww, align 4 + %16 = extractelement <4 x i8> %15, i64 0 + %sisiext4 = sext i8 %16 to i32 + %17 = load <4 x i8>, <4 x i8>* %ww, align 4 + %18 = extractelement <4 x i8> %17, i64 1 + %sisiext5 = sext i8 %18 to i32 + %19 = load <4 x i8>, <4 x i8>* %ww, align 4 + %20 = extractelement <4 x i8> %19, i64 2 + %sisiext6 = sext i8 %20 to i32 + %21 = load <4 x i8>, <4 x i8>* %ww, align 4 + %22 = extractelement <4 x i8> %21, i64 3 + %sisiext7 = sext i8 %22 to i32 + %23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i32 0, i32 0), i32 %sisiext4, i32 %sisiext5, i32 %sisiext6, i32 %sisiext7) + %24 = load <4 x i8>, <4 x i8>* %y, align 4 + %25 = load <4 x i8>, <4 x i8>* %z, align 4 + %gt = icmp ugt <4 x i8> %24, %25 + %26 = sext <4 x i1> %gt to <4 x i8> + store <4 x i8> %26, <4 x i8>* %ww, align 4 + %27 = load <4 x i8>, <4 x i8>* %ww, align 4 + %28 = extractelement <4 x i8> %27, i64 0 + %sisiext8 = sext i8 %28 to i32 + %29 = load <4 x i8>, <4 x i8>* %ww, align 4 + %30 = extractelement <4 x i8> %29, i64 1 + %sisiext9 = sext i8 %30 to i32 + %31 = load <4 x i8>, <4 x i8>* %ww, align 4 + %32 = extractelement <4 x i8> %31, i64 2 + %sisiext10 = sext i8 %32 to i32 + %33 = load <4 x i8>, <4 x i8>* %ww, align 4 + %34 = extractelement <4 x i8> %33, i64 3 + %sisiext11 = sext i8 %34 to i32 + %35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i32 0, i32 0), i32 %sisiext8, i32 %sisiext9, i32 %sisiext10, i32 %sisiext11) + %36 = load <4 x i8>, <4 x i8>* %y, align 4 + %37 = load <4 x i8>, <4 x i8>* %z, align 4 + %ge = icmp uge <4 x i8> %36, %37 + %38 = sext <4 x i1> %ge to <4 x i8> + store <4 x i8> %38, <4 x i8>* %ww, align 4 + %39 = load <4 x i8>, <4 x i8>* %ww, align 4 + %40 = extractelement <4 x i8> %39, i64 0 + %sisiext12 = sext i8 %40 to i32 + %41 = load <4 x i8>, <4 x i8>* %ww, align 4 + %42 = extractelement <4 x i8> %41, i64 1 + %sisiext13 = sext i8 %42 to i32 + %43 = load <4 x i8>, <4 x i8>* %ww, align 4 + %44 = extractelement <4 x i8> %43, i64 2 + %sisiext14 = sext i8 %44 to i32 + %45 = load <4 x i8>, <4 x i8>* %ww, align 4 + %46 = extractelement <4 x i8> %45, i64 3 + %sisiext15 = sext i8 %46 to i32 + %47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.13, i32 0, i32 0), i32 %sisiext12, i32 %sisiext13, i32 %sisiext14, i32 %sisiext15) + %48 = load <4 x i8>, <4 x i8>* %y, align 4 + %49 = load <4 x i8>, <4 x i8>* %z, align 4 + %eq = icmp eq <4 x i8> %48, %49 + %50 = sext <4 x i1> %eq to <4 x i8> + store <4 x i8> %50, <4 x i8>* %ww, align 4 + %51 = load <4 x i8>, <4 x i8>* %ww, align 4 + %52 = extractelement <4 x i8> %51, i64 0 + %sisiext16 = sext i8 %52 to i32 + %53 = load <4 x i8>, <4 x i8>* %ww, align 4 + %54 = extractelement <4 x i8> %53, i64 1 + %sisiext17 = sext i8 %54 to i32 + %55 = load <4 x i8>, <4 x i8>* %ww, align 4 + %56 = extractelement <4 x i8> %55, i64 2 + %sisiext18 = sext i8 %56 to i32 + %57 = load <4 x i8>, <4 x i8>* %ww, align 4 + %58 = extractelement <4 x i8> %57, i64 3 + %sisiext19 = sext i8 %58 to i32 + %59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.14, i32 0, i32 0), i32 %sisiext16, i32 %sisiext17, i32 %sisiext18, i32 %sisiext19) + %60 = load <4 x i8>, <4 x i8>* %y, align 4 + %61 = load <4 x i8>, <4 x i8>* %z, align 4 + %neq = icmp ne <4 x i8> %60, %61 + %62 = sext <4 x i1> %neq to <4 x i8> + store <4 x i8> %62, <4 x i8>* %ww, align 4 + %63 = load <4 x i8>, <4 x i8>* %ww, align 4 + %64 = extractelement <4 x i8> %63, i64 0 + %sisiext20 = sext i8 %64 to i32 + %65 = load <4 x i8>, <4 x i8>* %ww, align 4 + %66 = extractelement <4 x i8> %65, i64 1 + %sisiext21 = sext i8 %66 to i32 + %67 = load <4 x i8>, <4 x i8>* %ww, align 4 + %68 = extractelement <4 x i8> %67, i64 2 + %sisiext22 = sext i8 %68 to i32 + %69 = load <4 x i8>, <4 x i8>* %ww, align 4 + %70 = extractelement <4 x i8> %69, i64 3 + %sisiext23 = sext i8 %70 to i32 + %71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.15, i32 0, i32 0), i32 %sisiext20, i32 %sisiext21, i32 %sisiext22, i32 %sisiext23) ret void } @@ -177,7 +401,7 @@ entry: %7 = extractelement <4 x i32> %6, i64 2 %8 = load <4 x i32>, <4 x i32>* %w, align 16 %9 = extractelement <4 x i32> %8, i64 3 - %10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.5, i32 0, i32 0), i32 %3, i32 %5, i32 %7, i32 %9) + %10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.16, i32 0, i32 0), i32 %3, i32 %5, i32 %7, i32 %9) %11 = load <4 x i32>, <4 x i32>* %y, align 16 %12 = load <4 x i32>, <4 x i32>* %z, align 16 %mul = mul <4 x i32> %11, %12 @@ -190,7 +414,7 @@ entry: %18 = extractelement <4 x i32> %17, i64 2 %19 = load <4 x i32>, <4 x i32>* %w, align 16 %20 = extractelement <4 x i32> %19, i64 3 - %21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.6, i32 0, i32 0), i32 %14, i32 %16, i32 %18, i32 %20) + %21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.17, i32 0, i32 0), i32 %14, i32 %16, i32 %18, i32 %20) %22 = load <4 x i32>, <4 x i32>* %y, align 16 %23 = load <4 x i32>, <4 x i32>* %z, align 16 %sdiv = sdiv <4 x i32> %22, %23 @@ -203,7 +427,7 @@ entry: %29 = extractelement <4 x i32> %28, i64 2 %30 = load <4 x i32>, <4 x i32>* %w, align 16 %31 = extractelement <4 x i32> %30, i64 3 - %32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.7, i32 0, i32 0), i32 %25, i32 %27, i32 %29, i32 %31) + %32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.18, i32 0, i32 0), i32 %25, i32 %27, i32 %29, i32 %31) %33 = load <4 x i32>, <4 x i32>* %y, align 16 %34 = load <4 x i32>, <4 x i32>* %z, align 16 %sub = sub <4 x i32> %33, %34 @@ -216,7 +440,7 @@ entry: %40 = extractelement <4 x i32> %39, i64 2 %41 = load <4 x i32>, <4 x i32>* %w, align 16 %42 = extractelement <4 x i32> %41, i64 3 - %43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i32 0, i32 0), i32 %36, i32 %38, i32 %40, i32 %42) + %43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.19, i32 0, i32 0), i32 %36, i32 %38, i32 %40, i32 %42) %44 = load <4 x i32>, <4 x i32>* %z, align 16 %45 = load <4 x i32>, <4 x i32>* %y, align 16 %ashr = ashr <4 x i32> %44, %45 @@ -230,7 +454,7 @@ entry: %52 = extractelement <4 x i32> %51, i64 2 %53 = load <4 x i32>, <4 x i32>* %w, align 16 %54 = extractelement <4 x i32> %53, i64 3 - %55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i32 0, i32 0), i32 %48, i32 %50, i32 %52, i32 %54) + %55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.20, i32 0, i32 0), i32 %48, i32 %50, i32 %52, i32 %54) %56 = load <4 x i32>, <4 x i32>* %z, align 16 %57 = load <4 x i32>, <4 x i32>* %y, align 16 %shl = shl <4 x i32> %56, %57 @@ -244,7 +468,7 @@ entry: %64 = extractelement <4 x i32> %63, i64 2 %65 = load <4 x i32>, <4 x i32>* %w, align 16 %66 = extractelement <4 x i32> %65, i64 3 - %67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i32 0, i32 0), i32 %60, i32 %62, i32 %64, i32 %66) + %67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.21, i32 0, i32 0), i32 %60, i32 %62, i32 %64, i32 %66) %68 = load <4 x i32>, <4 x i32>* %z, align 16 %69 = load <4 x i32>, <4 x i32>* %y, align 16 %gt = icmp sgt <4 x i32> %68, %69 @@ -258,14 +482,11 @@ entry: %76 = extractelement <4 x i32> %75, i64 2 %77 = load <4 x i32>, <4 x i32>* %w, align 16 %78 = extractelement <4 x i32> %77, i64 3 - %79 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i32 0, i32 0), i32 %72, i32 %74, i32 %76, i32 %78) - store <4 x i32> , <4 x i32>* %uz, align 16 - %80 = load <4 x i32>, <4 x i32>* %uz, align 16 + %79 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.22, i32 0, i32 0), i32 %72, i32 %74, i32 %76, i32 %78) + %80 = load <4 x i32>, <4 x i32>* %z, align 16 %81 = load <4 x i32>, <4 x i32>* %y, align 16 - %lt = icmp slt <4 x i32> %81, %80 - %check = icmp slt <4 x i32> %80, zeroinitializer - %siui-lt = or <4 x i1> %check, %lt - %82 = sext <4 x i1> %siui-lt to <4 x i32> + %ge = icmp sge <4 x i32> %80, %81 + %82 = sext <4 x i1> %ge to <4 x i32> store <4 x i32> %82, <4 x i32>* %w, align 16 %83 = load <4 x i32>, <4 x i32>* %w, align 16 %84 = extractelement <4 x i32> %83, i64 0 @@ -275,6 +496,159 @@ entry: %88 = extractelement <4 x i32> %87, i64 2 %89 = load <4 x i32>, <4 x i32>* %w, align 16 %90 = extractelement <4 x i32> %89, i64 3 - %91 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i32 0, i32 0), i32 %84, i32 %86, i32 %88, i32 %90) + %91 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.23, i32 0, i32 0), i32 %84, i32 %86, i32 %88, i32 %90) + %92 = load <4 x i32>, <4 x i32>* %z, align 16 + %93 = load <4 x i32>, <4 x i32>* %y, align 16 + %lt = icmp slt <4 x i32> %92, %93 + %94 = sext <4 x i1> %lt to <4 x i32> + store <4 x i32> %94, <4 x i32>* %w, align 16 + %95 = load <4 x i32>, <4 x i32>* %w, align 16 + %96 = extractelement <4 x i32> %95, i64 0 + %97 = load <4 x i32>, <4 x i32>* %w, align 16 + %98 = extractelement <4 x i32> %97, i64 1 + %99 = load <4 x i32>, <4 x i32>* %w, align 16 + %100 = extractelement <4 x i32> %99, i64 2 + %101 = load <4 x i32>, <4 x i32>* %w, align 16 + %102 = extractelement <4 x i32> %101, i64 3 + %103 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.24, i32 0, i32 0), i32 %96, i32 %98, i32 %100, i32 %102) + %104 = load <4 x i32>, <4 x i32>* %z, align 16 + %105 = load <4 x i32>, <4 x i32>* %y, align 16 + %le = icmp sle <4 x i32> %104, %105 + %106 = sext <4 x i1> %le to <4 x i32> + store <4 x i32> %106, <4 x i32>* %w, align 16 + %107 = load <4 x i32>, <4 x i32>* %w, align 16 + %108 = extractelement <4 x i32> %107, i64 0 + %109 = load <4 x i32>, <4 x i32>* %w, align 16 + %110 = extractelement <4 x i32> %109, i64 1 + %111 = load <4 x i32>, <4 x i32>* %w, align 16 + %112 = extractelement <4 x i32> %111, i64 2 + %113 = load <4 x i32>, <4 x i32>* %w, align 16 + %114 = extractelement <4 x i32> %113, i64 3 + %115 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.25, i32 0, i32 0), i32 %108, i32 %110, i32 %112, i32 %114) + %116 = load <4 x i32>, <4 x i32>* %z, align 16 + %117 = load <4 x i32>, <4 x i32>* %y, align 16 + %eq = icmp eq <4 x i32> %116, %117 + %118 = sext <4 x i1> %eq to <4 x i32> + store <4 x i32> %118, <4 x i32>* %w, align 16 + %119 = load <4 x i32>, <4 x i32>* %w, align 16 + %120 = extractelement <4 x i32> %119, i64 0 + %121 = load <4 x i32>, <4 x i32>* %w, align 16 + %122 = extractelement <4 x i32> %121, i64 1 + %123 = load <4 x i32>, <4 x i32>* %w, align 16 + %124 = extractelement <4 x i32> %123, i64 2 + %125 = load <4 x i32>, <4 x i32>* %w, align 16 + %126 = extractelement <4 x i32> %125, i64 3 + %127 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.26, i32 0, i32 0), i32 %120, i32 %122, i32 %124, i32 %126) + %128 = load <4 x i32>, <4 x i32>* %z, align 16 + %129 = load <4 x i32>, <4 x i32>* %y, align 16 + %neq = icmp ne <4 x i32> %128, %129 + %130 = sext <4 x i1> %neq to <4 x i32> + store <4 x i32> %130, <4 x i32>* %w, align 16 + %131 = load <4 x i32>, <4 x i32>* %w, align 16 + %132 = extractelement <4 x i32> %131, i64 0 + %133 = load <4 x i32>, <4 x i32>* %w, align 16 + %134 = extractelement <4 x i32> %133, i64 1 + %135 = load <4 x i32>, <4 x i32>* %w, align 16 + %136 = extractelement <4 x i32> %135, i64 2 + %137 = load <4 x i32>, <4 x i32>* %w, align 16 + %138 = extractelement <4 x i32> %137, i64 3 + %139 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.27, i32 0, i32 0), i32 %132, i32 %134, i32 %136, i32 %138) + store <4 x i32> , <4 x i32>* %uz, align 16 + %140 = load <4 x i32>, <4 x i32>* %uz, align 16 + %141 = load <4 x i32>, <4 x i32>* %y, align 16 + %lt1 = icmp slt <4 x i32> %141, %140 + %check = icmp slt <4 x i32> %140, zeroinitializer + %siui-lt = or <4 x i1> %check, %lt1 + %142 = sext <4 x i1> %siui-lt to <4 x i32> + store <4 x i32> %142, <4 x i32>* %w, align 16 + %143 = load <4 x i32>, <4 x i32>* %w, align 16 + %144 = extractelement <4 x i32> %143, i64 0 + %145 = load <4 x i32>, <4 x i32>* %w, align 16 + %146 = extractelement <4 x i32> %145, i64 1 + %147 = load <4 x i32>, <4 x i32>* %w, align 16 + %148 = extractelement <4 x i32> %147, i64 2 + %149 = load <4 x i32>, <4 x i32>* %w, align 16 + %150 = extractelement <4 x i32> %149, i64 3 + %151 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.28, i32 0, i32 0), i32 %144, i32 %146, i32 %148, i32 %150) + %152 = load <4 x i32>, <4 x i32>* %uz, align 16 + %153 = load <4 x i32>, <4 x i32>* %y, align 16 + %le2 = icmp sle <4 x i32> %153, %152 + %check3 = icmp slt <4 x i32> %152, zeroinitializer + %siui-le = or <4 x i1> %check3, %le2 + %154 = sext <4 x i1> %siui-le to <4 x i32> + store <4 x i32> %154, <4 x i32>* %w, align 16 + %155 = load <4 x i32>, <4 x i32>* %w, align 16 + %156 = extractelement <4 x i32> %155, i64 0 + %157 = load <4 x i32>, <4 x i32>* %w, align 16 + %158 = extractelement <4 x i32> %157, i64 1 + %159 = load <4 x i32>, <4 x i32>* %w, align 16 + %160 = extractelement <4 x i32> %159, i64 2 + %161 = load <4 x i32>, <4 x i32>* %w, align 16 + %162 = extractelement <4 x i32> %161, i64 3 + %163 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.29, i32 0, i32 0), i32 %156, i32 %158, i32 %160, i32 %162) + %164 = load <4 x i32>, <4 x i32>* %uz, align 16 + %165 = load <4 x i32>, <4 x i32>* %y, align 16 + %gt4 = icmp sgt <4 x i32> %165, %164 + %check5 = icmp sge <4 x i32> %164, zeroinitializer + %siui-gt = and <4 x i1> %check5, %gt4 + %166 = sext <4 x i1> %siui-gt to <4 x i32> + store <4 x i32> %166, <4 x i32>* %w, align 16 + %167 = load <4 x i32>, <4 x i32>* %w, align 16 + %168 = extractelement <4 x i32> %167, i64 0 + %169 = load <4 x i32>, <4 x i32>* %w, align 16 + %170 = extractelement <4 x i32> %169, i64 1 + %171 = load <4 x i32>, <4 x i32>* %w, align 16 + %172 = extractelement <4 x i32> %171, i64 2 + %173 = load <4 x i32>, <4 x i32>* %w, align 16 + %174 = extractelement <4 x i32> %173, i64 3 + %175 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.30, i32 0, i32 0), i32 %168, i32 %170, i32 %172, i32 %174) + %176 = load <4 x i32>, <4 x i32>* %uz, align 16 + %177 = load <4 x i32>, <4 x i32>* %y, align 16 + %ge6 = icmp sge <4 x i32> %177, %176 + %check7 = icmp sge <4 x i32> %176, zeroinitializer + %siui-ge = and <4 x i1> %check7, %ge6 + %178 = sext <4 x i1> %siui-ge to <4 x i32> + store <4 x i32> %178, <4 x i32>* %w, align 16 + %179 = load <4 x i32>, <4 x i32>* %w, align 16 + %180 = extractelement <4 x i32> %179, i64 0 + %181 = load <4 x i32>, <4 x i32>* %w, align 16 + %182 = extractelement <4 x i32> %181, i64 1 + %183 = load <4 x i32>, <4 x i32>* %w, align 16 + %184 = extractelement <4 x i32> %183, i64 2 + %185 = load <4 x i32>, <4 x i32>* %w, align 16 + %186 = extractelement <4 x i32> %185, i64 3 + %187 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.31, i32 0, i32 0), i32 %180, i32 %182, i32 %184, i32 %186) + %188 = load <4 x i32>, <4 x i32>* %uz, align 16 + %189 = load <4 x i32>, <4 x i32>* %y, align 16 + %eq8 = icmp eq <4 x i32> %189, %188 + %check9 = icmp sge <4 x i32> %189, zeroinitializer + %siui-eq = and <4 x i1> %check9, %eq8 + %190 = sext <4 x i1> %siui-eq to <4 x i32> + store <4 x i32> %190, <4 x i32>* %w, align 16 + %191 = load <4 x i32>, <4 x i32>* %w, align 16 + %192 = extractelement <4 x i32> %191, i64 0 + %193 = load <4 x i32>, <4 x i32>* %w, align 16 + %194 = extractelement <4 x i32> %193, i64 1 + %195 = load <4 x i32>, <4 x i32>* %w, align 16 + %196 = extractelement <4 x i32> %195, i64 2 + %197 = load <4 x i32>, <4 x i32>* %w, align 16 + %198 = extractelement <4 x i32> %197, i64 3 + %199 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.32, i32 0, i32 0), i32 %192, i32 %194, i32 %196, i32 %198) + %200 = load <4 x i32>, <4 x i32>* %uz, align 16 + %201 = load <4 x i32>, <4 x i32>* %y, align 16 + %neq10 = icmp ne <4 x i32> %201, %200 + %check11 = icmp slt <4 x i32> %201, zeroinitializer + %siui-ne = or <4 x i1> %check11, %neq10 + %202 = sext <4 x i1> %siui-ne to <4 x i32> + store <4 x i32> %202, <4 x i32>* %w, align 16 + %203 = load <4 x i32>, <4 x i32>* %w, align 16 + %204 = extractelement <4 x i32> %203, i64 0 + %205 = load <4 x i32>, <4 x i32>* %w, align 16 + %206 = extractelement <4 x i32> %205, i64 1 + %207 = load <4 x i32>, <4 x i32>* %w, align 16 + %208 = extractelement <4 x i32> %207, i64 2 + %209 = load <4 x i32>, <4 x i32>* %w, align 16 + %210 = extractelement <4 x i32> %209, i64 3 + %211 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.33, i32 0, i32 0), i32 %204, i32 %206, i32 %208, i32 %210) ret void -} +} \ No newline at end of file diff --git a/test/test_suite/vector/vector_ops2.c3t b/test/test_suite/vector/vector_ops2.c3t index d37dd8e0e..5a5fd3158 100644 --- a/test/test_suite/vector/vector_ops2.c3t +++ b/test/test_suite/vector/vector_ops2.c3t @@ -17,11 +17,34 @@ fn void testf() libc::printf("%f %f %f %f\n", w[0], w[1], w[2], w[3]); int[<4>] ww = y < z; libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y <= z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y > z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y >= z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y == z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y != z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); } fn void testb() { - bool[<4>] d = { true, false, true, true }; + bool[<4>] y = { true, false, true, true }; + bool[<4>] z = { false, false, true, true }; + ichar[<4>] ww = y < z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y <= z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y > z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y >= z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y == z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); + ww = y != z; + libc::printf("%d %d %d %d\n", ww[0], ww[1], ww[2], ww[3]); } fn void testi() @@ -42,9 +65,29 @@ fn void testi() libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); w = z > y; libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z >= y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z < y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z <= y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z == y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = z != y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); uint[<4>] uz = { 2, 6, 2, 1 }; w = uz > y; libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz >= y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz < y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz <= y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz == y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); + w = uz != y; + libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]); } fn void main() @@ -156,14 +199,195 @@ checkok: ; preds = %panic, %entry %55 = load <4 x i32>, <4 x i32>* %ww, align 16 %56 = extractelement <4 x i32> %55, i64 3 %57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i32 0, i32 0), i32 %50, i32 %52, i32 %54, i32 %56) + %58 = load <4 x float>, <4 x float>* %y, align 16 + %59 = load <4 x float>, <4 x float>* %z, align 16 + %le = fcmp ole <4 x float> %58, %59 + %60 = sext <4 x i1> %le to <4 x i32> + store <4 x i32> %60, <4 x i32>* %ww, align 16 + %61 = load <4 x i32>, <4 x i32>* %ww, align 16 + %62 = extractelement <4 x i32> %61, i64 0 + %63 = load <4 x i32>, <4 x i32>* %ww, align 16 + %64 = extractelement <4 x i32> %63, i64 1 + %65 = load <4 x i32>, <4 x i32>* %ww, align 16 + %66 = extractelement <4 x i32> %65, i64 2 + %67 = load <4 x i32>, <4 x i32>* %ww, align 16 + %68 = extractelement <4 x i32> %67, i64 3 + %69 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.5, i32 0, i32 0), i32 %62, i32 %64, i32 %66, i32 %68) + %70 = load <4 x float>, <4 x float>* %y, align 16 + %71 = load <4 x float>, <4 x float>* %z, align 16 + %gt = fcmp ogt <4 x float> %70, %71 + %72 = sext <4 x i1> %gt to <4 x i32> + store <4 x i32> %72, <4 x i32>* %ww, align 16 + %73 = load <4 x i32>, <4 x i32>* %ww, align 16 + %74 = extractelement <4 x i32> %73, i64 0 + %75 = load <4 x i32>, <4 x i32>* %ww, align 16 + %76 = extractelement <4 x i32> %75, i64 1 + %77 = load <4 x i32>, <4 x i32>* %ww, align 16 + %78 = extractelement <4 x i32> %77, i64 2 + %79 = load <4 x i32>, <4 x i32>* %ww, align 16 + %80 = extractelement <4 x i32> %79, i64 3 + %81 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.6, i32 0, i32 0), i32 %74, i32 %76, i32 %78, i32 %80) + %82 = load <4 x float>, <4 x float>* %y, align 16 + %83 = load <4 x float>, <4 x float>* %z, align 16 + %ge = fcmp oge <4 x float> %82, %83 + %84 = sext <4 x i1> %ge to <4 x i32> + store <4 x i32> %84, <4 x i32>* %ww, align 16 + %85 = load <4 x i32>, <4 x i32>* %ww, align 16 + %86 = extractelement <4 x i32> %85, i64 0 + %87 = load <4 x i32>, <4 x i32>* %ww, align 16 + %88 = extractelement <4 x i32> %87, i64 1 + %89 = load <4 x i32>, <4 x i32>* %ww, align 16 + %90 = extractelement <4 x i32> %89, i64 2 + %91 = load <4 x i32>, <4 x i32>* %ww, align 16 + %92 = extractelement <4 x i32> %91, i64 3 + %93 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.7, i32 0, i32 0), i32 %86, i32 %88, i32 %90, i32 %92) + %94 = load <4 x float>, <4 x float>* %y, align 16 + %95 = load <4 x float>, <4 x float>* %z, align 16 + %eq = fcmp oeq <4 x float> %94, %95 + %96 = sext <4 x i1> %eq to <4 x i32> + store <4 x i32> %96, <4 x i32>* %ww, align 16 + %97 = load <4 x i32>, <4 x i32>* %ww, align 16 + %98 = extractelement <4 x i32> %97, i64 0 + %99 = load <4 x i32>, <4 x i32>* %ww, align 16 + %100 = extractelement <4 x i32> %99, i64 1 + %101 = load <4 x i32>, <4 x i32>* %ww, align 16 + %102 = extractelement <4 x i32> %101, i64 2 + %103 = load <4 x i32>, <4 x i32>* %ww, align 16 + %104 = extractelement <4 x i32> %103, i64 3 + %105 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i32 0, i32 0), i32 %98, i32 %100, i32 %102, i32 %104) + %106 = load <4 x float>, <4 x float>* %y, align 16 + %107 = load <4 x float>, <4 x float>* %z, align 16 + %neq = fcmp one <4 x float> %106, %107 + %108 = sext <4 x i1> %neq to <4 x i32> + store <4 x i32> %108, <4 x i32>* %ww, align 16 + %109 = load <4 x i32>, <4 x i32>* %ww, align 16 + %110 = extractelement <4 x i32> %109, i64 0 + %111 = load <4 x i32>, <4 x i32>* %ww, align 16 + %112 = extractelement <4 x i32> %111, i64 1 + %113 = load <4 x i32>, <4 x i32>* %ww, align 16 + %114 = extractelement <4 x i32> %113, i64 2 + %115 = load <4 x i32>, <4 x i32>* %ww, align 16 + %116 = extractelement <4 x i32> %115, i64 3 + %117 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i32 0, i32 0), i32 %110, i32 %112, i32 %114, i32 %116) ret void } ; Function Attrs: nounwind define void @test.testb() #0 { entry: - %d = alloca <4 x i8>, align 4 - store <4 x i8> , <4 x i8>* %d, align 4 + %y = alloca <4 x i8>, align 4 + %z = alloca <4 x i8>, align 4 + %ww = alloca <4 x i8>, align 4 + store <4 x i8> , <4 x i8>* %y, align 4 + store <4 x i8> , <4 x i8>* %z, align 4 + %0 = load <4 x i8>, <4 x i8>* %y, align 4 + %1 = load <4 x i8>, <4 x i8>* %z, align 4 + %lt = icmp ult <4 x i8> %0, %1 + %2 = sext <4 x i1> %lt to <4 x i8> + store <4 x i8> %2, <4 x i8>* %ww, align 4 + %3 = load <4 x i8>, <4 x i8>* %ww, align 4 + %4 = extractelement <4 x i8> %3, i64 0 + %sisiext = sext i8 %4 to i32 + %5 = load <4 x i8>, <4 x i8>* %ww, align 4 + %6 = extractelement <4 x i8> %5, i64 1 + %sisiext1 = sext i8 %6 to i32 + %7 = load <4 x i8>, <4 x i8>* %ww, align 4 + %8 = extractelement <4 x i8> %7, i64 2 + %sisiext2 = sext i8 %8 to i32 + %9 = load <4 x i8>, <4 x i8>* %ww, align 4 + %10 = extractelement <4 x i8> %9, i64 3 + %sisiext3 = sext i8 %10 to i32 + %11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i32 0, i32 0), i32 %sisiext, i32 %sisiext1, i32 %sisiext2, i32 %sisiext3) + %12 = load <4 x i8>, <4 x i8>* %y, align 4 + %13 = load <4 x i8>, <4 x i8>* %z, align 4 + %le = icmp ule <4 x i8> %12, %13 + %14 = sext <4 x i1> %le to <4 x i8> + store <4 x i8> %14, <4 x i8>* %ww, align 4 + %15 = load <4 x i8>, <4 x i8>* %ww, align 4 + %16 = extractelement <4 x i8> %15, i64 0 + %sisiext4 = sext i8 %16 to i32 + %17 = load <4 x i8>, <4 x i8>* %ww, align 4 + %18 = extractelement <4 x i8> %17, i64 1 + %sisiext5 = sext i8 %18 to i32 + %19 = load <4 x i8>, <4 x i8>* %ww, align 4 + %20 = extractelement <4 x i8> %19, i64 2 + %sisiext6 = sext i8 %20 to i32 + %21 = load <4 x i8>, <4 x i8>* %ww, align 4 + %22 = extractelement <4 x i8> %21, i64 3 + %sisiext7 = sext i8 %22 to i32 + %23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i32 0, i32 0), i32 %sisiext4, i32 %sisiext5, i32 %sisiext6, i32 %sisiext7) + %24 = load <4 x i8>, <4 x i8>* %y, align 4 + %25 = load <4 x i8>, <4 x i8>* %z, align 4 + %gt = icmp ugt <4 x i8> %24, %25 + %26 = sext <4 x i1> %gt to <4 x i8> + store <4 x i8> %26, <4 x i8>* %ww, align 4 + %27 = load <4 x i8>, <4 x i8>* %ww, align 4 + %28 = extractelement <4 x i8> %27, i64 0 + %sisiext8 = sext i8 %28 to i32 + %29 = load <4 x i8>, <4 x i8>* %ww, align 4 + %30 = extractelement <4 x i8> %29, i64 1 + %sisiext9 = sext i8 %30 to i32 + %31 = load <4 x i8>, <4 x i8>* %ww, align 4 + %32 = extractelement <4 x i8> %31, i64 2 + %sisiext10 = sext i8 %32 to i32 + %33 = load <4 x i8>, <4 x i8>* %ww, align 4 + %34 = extractelement <4 x i8> %33, i64 3 + %sisiext11 = sext i8 %34 to i32 + %35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i32 0, i32 0), i32 %sisiext8, i32 %sisiext9, i32 %sisiext10, i32 %sisiext11) + %36 = load <4 x i8>, <4 x i8>* %y, align 4 + %37 = load <4 x i8>, <4 x i8>* %z, align 4 + %ge = icmp uge <4 x i8> %36, %37 + %38 = sext <4 x i1> %ge to <4 x i8> + store <4 x i8> %38, <4 x i8>* %ww, align 4 + %39 = load <4 x i8>, <4 x i8>* %ww, align 4 + %40 = extractelement <4 x i8> %39, i64 0 + %sisiext12 = sext i8 %40 to i32 + %41 = load <4 x i8>, <4 x i8>* %ww, align 4 + %42 = extractelement <4 x i8> %41, i64 1 + %sisiext13 = sext i8 %42 to i32 + %43 = load <4 x i8>, <4 x i8>* %ww, align 4 + %44 = extractelement <4 x i8> %43, i64 2 + %sisiext14 = sext i8 %44 to i32 + %45 = load <4 x i8>, <4 x i8>* %ww, align 4 + %46 = extractelement <4 x i8> %45, i64 3 + %sisiext15 = sext i8 %46 to i32 + %47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.13, i32 0, i32 0), i32 %sisiext12, i32 %sisiext13, i32 %sisiext14, i32 %sisiext15) + %48 = load <4 x i8>, <4 x i8>* %y, align 4 + %49 = load <4 x i8>, <4 x i8>* %z, align 4 + %eq = icmp eq <4 x i8> %48, %49 + %50 = sext <4 x i1> %eq to <4 x i8> + store <4 x i8> %50, <4 x i8>* %ww, align 4 + %51 = load <4 x i8>, <4 x i8>* %ww, align 4 + %52 = extractelement <4 x i8> %51, i64 0 + %sisiext16 = sext i8 %52 to i32 + %53 = load <4 x i8>, <4 x i8>* %ww, align 4 + %54 = extractelement <4 x i8> %53, i64 1 + %sisiext17 = sext i8 %54 to i32 + %55 = load <4 x i8>, <4 x i8>* %ww, align 4 + %56 = extractelement <4 x i8> %55, i64 2 + %sisiext18 = sext i8 %56 to i32 + %57 = load <4 x i8>, <4 x i8>* %ww, align 4 + %58 = extractelement <4 x i8> %57, i64 3 + %sisiext19 = sext i8 %58 to i32 + %59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.14, i32 0, i32 0), i32 %sisiext16, i32 %sisiext17, i32 %sisiext18, i32 %sisiext19) + %60 = load <4 x i8>, <4 x i8>* %y, align 4 + %61 = load <4 x i8>, <4 x i8>* %z, align 4 + %neq = icmp ne <4 x i8> %60, %61 + %62 = sext <4 x i1> %neq to <4 x i8> + store <4 x i8> %62, <4 x i8>* %ww, align 4 + %63 = load <4 x i8>, <4 x i8>* %ww, align 4 + %64 = extractelement <4 x i8> %63, i64 0 + %sisiext20 = sext i8 %64 to i32 + %65 = load <4 x i8>, <4 x i8>* %ww, align 4 + %66 = extractelement <4 x i8> %65, i64 1 + %sisiext21 = sext i8 %66 to i32 + %67 = load <4 x i8>, <4 x i8>* %ww, align 4 + %68 = extractelement <4 x i8> %67, i64 2 + %sisiext22 = sext i8 %68 to i32 + %69 = load <4 x i8>, <4 x i8>* %ww, align 4 + %70 = extractelement <4 x i8> %69, i64 3 + %sisiext23 = sext i8 %70 to i32 + %71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.15, i32 0, i32 0), i32 %sisiext20, i32 %sisiext21, i32 %sisiext22, i32 %sisiext23) ret void } @@ -188,7 +412,7 @@ entry: %7 = extractelement <4 x i32> %6, i64 2 %8 = load <4 x i32>, <4 x i32>* %w, align 16 %9 = extractelement <4 x i32> %8, i64 3 - %10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.5, i32 0, i32 0), i32 %3, i32 %5, i32 %7, i32 %9) + %10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.16, i32 0, i32 0), i32 %3, i32 %5, i32 %7, i32 %9) %11 = load <4 x i32>, <4 x i32>* %y, align 16 %12 = load <4 x i32>, <4 x i32>* %z, align 16 %mul = mul <4 x i32> %11, %12 @@ -201,7 +425,7 @@ entry: %18 = extractelement <4 x i32> %17, i64 2 %19 = load <4 x i32>, <4 x i32>* %w, align 16 %20 = extractelement <4 x i32> %19, i64 3 - %21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.6, i32 0, i32 0), i32 %14, i32 %16, i32 %18, i32 %20) + %21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.17, i32 0, i32 0), i32 %14, i32 %16, i32 %18, i32 %20) %22 = load <4 x i32>, <4 x i32>* %y, align 16 %23 = load <4 x i32>, <4 x i32>* %z, align 16 %24 = call i32 @llvm.vector.reduce.umin.v4i32(<4 x i32> %23) @@ -209,7 +433,7 @@ entry: br i1 %zero, label %panic, label %checkok panic: ; preds = %entry - call void @"std::builtin.panic"(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @3, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @4, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @5, i64 0, i64 0), i32 33) + call void @"std::builtin.panic"(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @3, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @4, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @5, i64 0, i64 0), i32 56) br label %checkok checkok: ; preds = %panic, %entry @@ -223,7 +447,7 @@ checkok: ; preds = %panic, %entry %30 = extractelement <4 x i32> %29, i64 2 %31 = load <4 x i32>, <4 x i32>* %w, align 16 %32 = extractelement <4 x i32> %31, i64 3 - %33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.7, i32 0, i32 0), i32 %26, i32 %28, i32 %30, i32 %32) + %33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.18, i32 0, i32 0), i32 %26, i32 %28, i32 %30, i32 %32) %34 = load <4 x i32>, <4 x i32>* %y, align 16 %35 = load <4 x i32>, <4 x i32>* %z, align 16 %sub = sub <4 x i32> %34, %35 @@ -236,7 +460,7 @@ checkok: ; preds = %panic, %entry %41 = extractelement <4 x i32> %40, i64 2 %42 = load <4 x i32>, <4 x i32>* %w, align 16 %43 = extractelement <4 x i32> %42, i64 3 - %44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i32 0, i32 0), i32 %37, i32 %39, i32 %41, i32 %43) + %44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.19, i32 0, i32 0), i32 %37, i32 %39, i32 %41, i32 %43) %45 = load <4 x i32>, <4 x i32>* %z, align 16 %46 = load <4 x i32>, <4 x i32>* %y, align 16 %47 = call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %46) @@ -244,7 +468,7 @@ checkok: ; preds = %panic, %entry br i1 %shift_underflow, label %panic1, label %checkok2 panic1: ; preds = %checkok - call void @"std::builtin.panic"(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @6, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @7, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @8, i64 0, i64 0), i32 37) + call void @"std::builtin.panic"(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @6, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @7, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @8, i64 0, i64 0), i32 60) br label %checkok2 checkok2: ; preds = %panic1, %checkok @@ -253,7 +477,7 @@ checkok2: ; preds = %panic1, %checkok br i1 %shift_exceeds, label %panic3, label %checkok4 panic3: ; preds = %checkok2 - call void @"std::builtin.panic"(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @9, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @10, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @11, i64 0, i64 0), i32 37) + call void @"std::builtin.panic"(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @9, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @10, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @11, i64 0, i64 0), i32 60) br label %checkok4 checkok4: ; preds = %panic3, %checkok2 @@ -268,7 +492,7 @@ checkok4: ; preds = %panic3, %checkok2 %55 = extractelement <4 x i32> %54, i64 2 %56 = load <4 x i32>, <4 x i32>* %w, align 16 %57 = extractelement <4 x i32> %56, i64 3 - %58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i32 0, i32 0), i32 %51, i32 %53, i32 %55, i32 %57) + %58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.20, i32 0, i32 0), i32 %51, i32 %53, i32 %55, i32 %57) %59 = load <4 x i32>, <4 x i32>* %z, align 16 %60 = load <4 x i32>, <4 x i32>* %y, align 16 %61 = call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %60) @@ -276,7 +500,7 @@ checkok4: ; preds = %panic3, %checkok2 br i1 %shift_underflow5, label %panic6, label %checkok7 panic6: ; preds = %checkok4 - call void @"std::builtin.panic"(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @12, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @13, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @14, i64 0, i64 0), i32 39) + call void @"std::builtin.panic"(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @12, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @13, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @14, i64 0, i64 0), i32 62) br label %checkok7 checkok7: ; preds = %panic6, %checkok4 @@ -285,7 +509,7 @@ checkok7: ; preds = %panic6, %checkok4 br i1 %shift_exceeds8, label %panic9, label %checkok10 panic9: ; preds = %checkok7 - call void @"std::builtin.panic"(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @15, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @16, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @17, i64 0, i64 0), i32 39) + call void @"std::builtin.panic"(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @15, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @16, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @17, i64 0, i64 0), i32 62) br label %checkok10 checkok10: ; preds = %panic9, %checkok7 @@ -300,7 +524,7 @@ checkok10: ; preds = %panic9, %checkok7 %69 = extractelement <4 x i32> %68, i64 2 %70 = load <4 x i32>, <4 x i32>* %w, align 16 %71 = extractelement <4 x i32> %70, i64 3 - %72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i32 0, i32 0), i32 %65, i32 %67, i32 %69, i32 %71) + %72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.21, i32 0, i32 0), i32 %65, i32 %67, i32 %69, i32 %71) %73 = load <4 x i32>, <4 x i32>* %z, align 16 %74 = load <4 x i32>, <4 x i32>* %y, align 16 %gt = icmp sgt <4 x i32> %73, %74 @@ -314,14 +538,11 @@ checkok10: ; preds = %panic9, %checkok7 %81 = extractelement <4 x i32> %80, i64 2 %82 = load <4 x i32>, <4 x i32>* %w, align 16 %83 = extractelement <4 x i32> %82, i64 3 - %84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i32 0, i32 0), i32 %77, i32 %79, i32 %81, i32 %83) - store <4 x i32> , <4 x i32>* %uz, align 16 - %85 = load <4 x i32>, <4 x i32>* %uz, align 16 + %84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.22, i32 0, i32 0), i32 %77, i32 %79, i32 %81, i32 %83) + %85 = load <4 x i32>, <4 x i32>* %z, align 16 %86 = load <4 x i32>, <4 x i32>* %y, align 16 - %lt = icmp slt <4 x i32> %86, %85 - %check = icmp slt <4 x i32> %85, zeroinitializer - %siui-lt = or <4 x i1> %check, %lt - %87 = sext <4 x i1> %siui-lt to <4 x i32> + %ge = icmp sge <4 x i32> %85, %86 + %87 = sext <4 x i1> %ge to <4 x i32> store <4 x i32> %87, <4 x i32>* %w, align 16 %88 = load <4 x i32>, <4 x i32>* %w, align 16 %89 = extractelement <4 x i32> %88, i64 0 @@ -331,6 +552,159 @@ checkok10: ; preds = %panic9, %checkok7 %93 = extractelement <4 x i32> %92, i64 2 %94 = load <4 x i32>, <4 x i32>* %w, align 16 %95 = extractelement <4 x i32> %94, i64 3 - %96 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i32 0, i32 0), i32 %89, i32 %91, i32 %93, i32 %95) + %96 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.23, i32 0, i32 0), i32 %89, i32 %91, i32 %93, i32 %95) + %97 = load <4 x i32>, <4 x i32>* %z, align 16 + %98 = load <4 x i32>, <4 x i32>* %y, align 16 + %lt = icmp slt <4 x i32> %97, %98 + %99 = sext <4 x i1> %lt to <4 x i32> + store <4 x i32> %99, <4 x i32>* %w, align 16 + %100 = load <4 x i32>, <4 x i32>* %w, align 16 + %101 = extractelement <4 x i32> %100, i64 0 + %102 = load <4 x i32>, <4 x i32>* %w, align 16 + %103 = extractelement <4 x i32> %102, i64 1 + %104 = load <4 x i32>, <4 x i32>* %w, align 16 + %105 = extractelement <4 x i32> %104, i64 2 + %106 = load <4 x i32>, <4 x i32>* %w, align 16 + %107 = extractelement <4 x i32> %106, i64 3 + %108 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.24, i32 0, i32 0), i32 %101, i32 %103, i32 %105, i32 %107) + %109 = load <4 x i32>, <4 x i32>* %z, align 16 + %110 = load <4 x i32>, <4 x i32>* %y, align 16 + %le = icmp sle <4 x i32> %109, %110 + %111 = sext <4 x i1> %le to <4 x i32> + store <4 x i32> %111, <4 x i32>* %w, align 16 + %112 = load <4 x i32>, <4 x i32>* %w, align 16 + %113 = extractelement <4 x i32> %112, i64 0 + %114 = load <4 x i32>, <4 x i32>* %w, align 16 + %115 = extractelement <4 x i32> %114, i64 1 + %116 = load <4 x i32>, <4 x i32>* %w, align 16 + %117 = extractelement <4 x i32> %116, i64 2 + %118 = load <4 x i32>, <4 x i32>* %w, align 16 + %119 = extractelement <4 x i32> %118, i64 3 + %120 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.25, i32 0, i32 0), i32 %113, i32 %115, i32 %117, i32 %119) + %121 = load <4 x i32>, <4 x i32>* %z, align 16 + %122 = load <4 x i32>, <4 x i32>* %y, align 16 + %eq = icmp eq <4 x i32> %121, %122 + %123 = sext <4 x i1> %eq to <4 x i32> + store <4 x i32> %123, <4 x i32>* %w, align 16 + %124 = load <4 x i32>, <4 x i32>* %w, align 16 + %125 = extractelement <4 x i32> %124, i64 0 + %126 = load <4 x i32>, <4 x i32>* %w, align 16 + %127 = extractelement <4 x i32> %126, i64 1 + %128 = load <4 x i32>, <4 x i32>* %w, align 16 + %129 = extractelement <4 x i32> %128, i64 2 + %130 = load <4 x i32>, <4 x i32>* %w, align 16 + %131 = extractelement <4 x i32> %130, i64 3 + %132 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.26, i32 0, i32 0), i32 %125, i32 %127, i32 %129, i32 %131) + %133 = load <4 x i32>, <4 x i32>* %z, align 16 + %134 = load <4 x i32>, <4 x i32>* %y, align 16 + %neq = icmp ne <4 x i32> %133, %134 + %135 = sext <4 x i1> %neq to <4 x i32> + store <4 x i32> %135, <4 x i32>* %w, align 16 + %136 = load <4 x i32>, <4 x i32>* %w, align 16 + %137 = extractelement <4 x i32> %136, i64 0 + %138 = load <4 x i32>, <4 x i32>* %w, align 16 + %139 = extractelement <4 x i32> %138, i64 1 + %140 = load <4 x i32>, <4 x i32>* %w, align 16 + %141 = extractelement <4 x i32> %140, i64 2 + %142 = load <4 x i32>, <4 x i32>* %w, align 16 + %143 = extractelement <4 x i32> %142, i64 3 + %144 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.27, i32 0, i32 0), i32 %137, i32 %139, i32 %141, i32 %143) + store <4 x i32> , <4 x i32>* %uz, align 16 + %145 = load <4 x i32>, <4 x i32>* %uz, align 16 + %146 = load <4 x i32>, <4 x i32>* %y, align 16 + %lt11 = icmp slt <4 x i32> %146, %145 + %check = icmp slt <4 x i32> %145, zeroinitializer + %siui-lt = or <4 x i1> %check, %lt11 + %147 = sext <4 x i1> %siui-lt to <4 x i32> + store <4 x i32> %147, <4 x i32>* %w, align 16 + %148 = load <4 x i32>, <4 x i32>* %w, align 16 + %149 = extractelement <4 x i32> %148, i64 0 + %150 = load <4 x i32>, <4 x i32>* %w, align 16 + %151 = extractelement <4 x i32> %150, i64 1 + %152 = load <4 x i32>, <4 x i32>* %w, align 16 + %153 = extractelement <4 x i32> %152, i64 2 + %154 = load <4 x i32>, <4 x i32>* %w, align 16 + %155 = extractelement <4 x i32> %154, i64 3 + %156 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.28, i32 0, i32 0), i32 %149, i32 %151, i32 %153, i32 %155) + %157 = load <4 x i32>, <4 x i32>* %uz, align 16 + %158 = load <4 x i32>, <4 x i32>* %y, align 16 + %le12 = icmp sle <4 x i32> %158, %157 + %check13 = icmp slt <4 x i32> %157, zeroinitializer + %siui-le = or <4 x i1> %check13, %le12 + %159 = sext <4 x i1> %siui-le to <4 x i32> + store <4 x i32> %159, <4 x i32>* %w, align 16 + %160 = load <4 x i32>, <4 x i32>* %w, align 16 + %161 = extractelement <4 x i32> %160, i64 0 + %162 = load <4 x i32>, <4 x i32>* %w, align 16 + %163 = extractelement <4 x i32> %162, i64 1 + %164 = load <4 x i32>, <4 x i32>* %w, align 16 + %165 = extractelement <4 x i32> %164, i64 2 + %166 = load <4 x i32>, <4 x i32>* %w, align 16 + %167 = extractelement <4 x i32> %166, i64 3 + %168 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.29, i32 0, i32 0), i32 %161, i32 %163, i32 %165, i32 %167) + %169 = load <4 x i32>, <4 x i32>* %uz, align 16 + %170 = load <4 x i32>, <4 x i32>* %y, align 16 + %gt14 = icmp sgt <4 x i32> %170, %169 + %check15 = icmp sge <4 x i32> %169, zeroinitializer + %siui-gt = and <4 x i1> %check15, %gt14 + %171 = sext <4 x i1> %siui-gt to <4 x i32> + store <4 x i32> %171, <4 x i32>* %w, align 16 + %172 = load <4 x i32>, <4 x i32>* %w, align 16 + %173 = extractelement <4 x i32> %172, i64 0 + %174 = load <4 x i32>, <4 x i32>* %w, align 16 + %175 = extractelement <4 x i32> %174, i64 1 + %176 = load <4 x i32>, <4 x i32>* %w, align 16 + %177 = extractelement <4 x i32> %176, i64 2 + %178 = load <4 x i32>, <4 x i32>* %w, align 16 + %179 = extractelement <4 x i32> %178, i64 3 + %180 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.30, i32 0, i32 0), i32 %173, i32 %175, i32 %177, i32 %179) + %181 = load <4 x i32>, <4 x i32>* %uz, align 16 + %182 = load <4 x i32>, <4 x i32>* %y, align 16 + %ge16 = icmp sge <4 x i32> %182, %181 + %check17 = icmp sge <4 x i32> %181, zeroinitializer + %siui-ge = and <4 x i1> %check17, %ge16 + %183 = sext <4 x i1> %siui-ge to <4 x i32> + store <4 x i32> %183, <4 x i32>* %w, align 16 + %184 = load <4 x i32>, <4 x i32>* %w, align 16 + %185 = extractelement <4 x i32> %184, i64 0 + %186 = load <4 x i32>, <4 x i32>* %w, align 16 + %187 = extractelement <4 x i32> %186, i64 1 + %188 = load <4 x i32>, <4 x i32>* %w, align 16 + %189 = extractelement <4 x i32> %188, i64 2 + %190 = load <4 x i32>, <4 x i32>* %w, align 16 + %191 = extractelement <4 x i32> %190, i64 3 + %192 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.31, i32 0, i32 0), i32 %185, i32 %187, i32 %189, i32 %191) + %193 = load <4 x i32>, <4 x i32>* %uz, align 16 + %194 = load <4 x i32>, <4 x i32>* %y, align 16 + %eq18 = icmp eq <4 x i32> %194, %193 + %check19 = icmp sge <4 x i32> %194, zeroinitializer + %siui-eq = and <4 x i1> %check19, %eq18 + %195 = sext <4 x i1> %siui-eq to <4 x i32> + store <4 x i32> %195, <4 x i32>* %w, align 16 + %196 = load <4 x i32>, <4 x i32>* %w, align 16 + %197 = extractelement <4 x i32> %196, i64 0 + %198 = load <4 x i32>, <4 x i32>* %w, align 16 + %199 = extractelement <4 x i32> %198, i64 1 + %200 = load <4 x i32>, <4 x i32>* %w, align 16 + %201 = extractelement <4 x i32> %200, i64 2 + %202 = load <4 x i32>, <4 x i32>* %w, align 16 + %203 = extractelement <4 x i32> %202, i64 3 + %204 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.32, i32 0, i32 0), i32 %197, i32 %199, i32 %201, i32 %203) + %205 = load <4 x i32>, <4 x i32>* %uz, align 16 + %206 = load <4 x i32>, <4 x i32>* %y, align 16 + %neq20 = icmp ne <4 x i32> %206, %205 + %check21 = icmp slt <4 x i32> %206, zeroinitializer + %siui-ne = or <4 x i1> %check21, %neq20 + %207 = sext <4 x i1> %siui-ne to <4 x i32> + store <4 x i32> %207, <4 x i32>* %w, align 16 + %208 = load <4 x i32>, <4 x i32>* %w, align 16 + %209 = extractelement <4 x i32> %208, i64 0 + %210 = load <4 x i32>, <4 x i32>* %w, align 16 + %211 = extractelement <4 x i32> %210, i64 1 + %212 = load <4 x i32>, <4 x i32>* %w, align 16 + %213 = extractelement <4 x i32> %212, i64 2 + %214 = load <4 x i32>, <4 x i32>* %w, align 16 + %215 = extractelement <4 x i32> %214, i64 3 + %216 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.33, i32 0, i32 0), i32 %209, i32 %211, i32 %213, i32 %215) ret void }