mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 20:11:17 +00:00
654 lines
31 KiB
C
654 lines
31 KiB
C
// #target: macos-x64
|
|
import libc;
|
|
|
|
fn void testf()
|
|
{
|
|
float[<4>] y = { 1, 2, 3, 4 };
|
|
float[<4>] z = { 2, 2, 2, -100 };
|
|
float[<4>] w = y + z;
|
|
libc::printf("%f %f %f %f\n", w[0], w[1], w[2], w[3]);
|
|
w = y * z;
|
|
libc::printf("%f %f %f %f\n", w[0], w[1], w[2], w[3]);
|
|
w = y / z;
|
|
libc::printf("%f %f %f %f\n", w[0], w[1], w[2], w[3]);
|
|
w = y - z;
|
|
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>] 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()
|
|
{
|
|
int[<4>] y = { 1, 2, 3, 4 };
|
|
int[<4>] z = { 2, 2, 2, -100 };
|
|
int[<4>] w = y + z;
|
|
libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]);
|
|
w = y * z;
|
|
libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]);
|
|
w = y / z;
|
|
libc::printf("%d %d %d %d\n", w[0], w[1], w[2], w[3]);
|
|
w = y - z;
|
|
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]);
|
|
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()
|
|
{
|
|
testf();
|
|
testi();
|
|
testb();
|
|
}
|
|
|
|
/* #expect: vector_ops.ll
|
|
|
|
; Function Attrs: nounwind
|
|
define void @vector_ops_testf() #0 {
|
|
entry:
|
|
%y = alloca <4 x float>, align 16
|
|
%z = alloca <4 x float>, align 16
|
|
%w = alloca <4 x float>, align 16
|
|
%ww = alloca <4 x i32>, align 16
|
|
store <4 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00>, <4 x float>* %y, align 16
|
|
store <4 x float> <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float -1.000000e+02>, <4 x float>* %z, align 16
|
|
%0 = load <4 x float>, <4 x float>* %y, align 16
|
|
%1 = load <4 x float>, <4 x float>* %z, align 16
|
|
%fadd = fadd <4 x float> %0, %1
|
|
store <4 x float> %fadd, <4 x float>* %w, align 16
|
|
%2 = load <4 x float>, <4 x float>* %w, align 16
|
|
%3 = extractelement <4 x float> %2, i64 0
|
|
%fpfpext = fpext float %3 to double
|
|
%4 = load <4 x float>, <4 x float>* %w, align 16
|
|
%5 = extractelement <4 x float> %4, i64 1
|
|
%fpfpext1 = fpext float %5 to double
|
|
%6 = load <4 x float>, <4 x float>* %w, align 16
|
|
%7 = extractelement <4 x float> %6, i64 2
|
|
%fpfpext2 = fpext float %7 to double
|
|
%8 = load <4 x float>, <4 x float>* %w, align 16
|
|
%9 = extractelement <4 x float> %8, i64 3
|
|
%fpfpext3 = fpext float %9 to double
|
|
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), double %fpfpext, double %fpfpext1, double %fpfpext2, double %fpfpext3)
|
|
%11 = load <4 x float>, <4 x float>* %y, align 16
|
|
%12 = load <4 x float>, <4 x float>* %z, align 16
|
|
%fmul = fmul <4 x float> %11, %12
|
|
store <4 x float> %fmul, <4 x float>* %w, align 16
|
|
%13 = load <4 x float>, <4 x float>* %w, align 16
|
|
%14 = extractelement <4 x float> %13, i64 0
|
|
%fpfpext4 = fpext float %14 to double
|
|
%15 = load <4 x float>, <4 x float>* %w, align 16
|
|
%16 = extractelement <4 x float> %15, i64 1
|
|
%fpfpext5 = fpext float %16 to double
|
|
%17 = load <4 x float>, <4 x float>* %w, align 16
|
|
%18 = extractelement <4 x float> %17, i64 2
|
|
%fpfpext6 = fpext float %18 to double
|
|
%19 = load <4 x float>, <4 x float>* %w, align 16
|
|
%20 = extractelement <4 x float> %19, i64 3
|
|
%fpfpext7 = fpext float %20 to double
|
|
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i32 0, i32 0), double %fpfpext4, double %fpfpext5, double %fpfpext6, double %fpfpext7)
|
|
%22 = load <4 x float>, <4 x float>* %y, align 16
|
|
%23 = load <4 x float>, <4 x float>* %z, align 16
|
|
%fdiv = fdiv <4 x float> %22, %23
|
|
store <4 x float> %fdiv, <4 x float>* %w, align 16
|
|
%24 = load <4 x float>, <4 x float>* %w, align 16
|
|
%25 = extractelement <4 x float> %24, i64 0
|
|
%fpfpext8 = fpext float %25 to double
|
|
%26 = load <4 x float>, <4 x float>* %w, align 16
|
|
%27 = extractelement <4 x float> %26, i64 1
|
|
%fpfpext9 = fpext float %27 to double
|
|
%28 = load <4 x float>, <4 x float>* %w, align 16
|
|
%29 = extractelement <4 x float> %28, i64 2
|
|
%fpfpext10 = fpext float %29 to double
|
|
%30 = load <4 x float>, <4 x float>* %w, align 16
|
|
%31 = extractelement <4 x float> %30, i64 3
|
|
%fpfpext11 = fpext float %31 to double
|
|
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i32 0, i32 0), double %fpfpext8, double %fpfpext9, double %fpfpext10, double %fpfpext11)
|
|
%33 = load <4 x float>, <4 x float>* %y, align 16
|
|
%34 = load <4 x float>, <4 x float>* %z, align 16
|
|
%fsub = fsub <4 x float> %33, %34
|
|
store <4 x float> %fsub, <4 x float>* %w, align 16
|
|
%35 = load <4 x float>, <4 x float>* %w, align 16
|
|
%36 = extractelement <4 x float> %35, i64 0
|
|
%fpfpext12 = fpext float %36 to double
|
|
%37 = load <4 x float>, <4 x float>* %w, align 16
|
|
%38 = extractelement <4 x float> %37, i64 1
|
|
%fpfpext13 = fpext float %38 to double
|
|
%39 = load <4 x float>, <4 x float>* %w, align 16
|
|
%40 = extractelement <4 x float> %39, i64 2
|
|
%fpfpext14 = fpext float %40 to double
|
|
%41 = load <4 x float>, <4 x float>* %w, align 16
|
|
%42 = extractelement <4 x float> %41, i64 3
|
|
%fpfpext15 = fpext float %42 to double
|
|
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.3, i32 0, i32 0), double %fpfpext12, double %fpfpext13, double %fpfpext14, double %fpfpext15)
|
|
%44 = load <4 x float>, <4 x float>* %y, align 16
|
|
%45 = load <4 x float>, <4 x float>* %z, align 16
|
|
%lt = fcmp olt <4 x float> %44, %45
|
|
%46 = sext <4 x i1> %lt to <4 x i32>
|
|
store <4 x i32> %46, <4 x i32>* %ww, align 16
|
|
%47 = load <4 x i32>, <4 x i32>* %ww, align 16
|
|
%48 = extractelement <4 x i32> %47, i64 0
|
|
%49 = load <4 x i32>, <4 x i32>* %ww, align 16
|
|
%50 = extractelement <4 x i32> %49, i64 1
|
|
%51 = load <4 x i32>, <4 x i32>* %ww, align 16
|
|
%52 = extractelement <4 x i32> %51, i64 2
|
|
%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:
|
|
%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> <i8 1, i8 0, i8 1, i8 1>, <4 x i8>* %y, align 4
|
|
store <4 x i8> <i8 0, i8 0, i8 1, i8 1>, <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
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define void @vector_ops_testi() #0 {
|
|
entry:
|
|
%y = alloca <4 x i32>, align 16
|
|
%z = alloca <4 x i32>, align 16
|
|
%w = alloca <4 x i32>, align 16
|
|
%uz = alloca <4 x i32>, align 16
|
|
store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, <4 x i32>* %y, align 16
|
|
store <4 x i32> <i32 2, i32 2, i32 2, i32 -100>, <4 x i32>* %z, align 16
|
|
%0 = load <4 x i32>, <4 x i32>* %y, align 16
|
|
%1 = load <4 x i32>, <4 x i32>* %z, align 16
|
|
%add = add <4 x i32> %0, %1
|
|
store <4 x i32> %add, <4 x i32>* %w, align 16
|
|
%2 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%3 = extractelement <4 x i32> %2, i64 0
|
|
%4 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%5 = extractelement <4 x i32> %4, i64 1
|
|
%6 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%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.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
|
|
store <4 x i32> %mul, <4 x i32>* %w, align 16
|
|
%13 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%14 = extractelement <4 x i32> %13, i64 0
|
|
%15 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%16 = extractelement <4 x i32> %15, i64 1
|
|
%17 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%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.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
|
|
store <4 x i32> %sdiv, <4 x i32>* %w, align 16
|
|
%24 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%25 = extractelement <4 x i32> %24, i64 0
|
|
%26 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%27 = extractelement <4 x i32> %26, i64 1
|
|
%28 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%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.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
|
|
store <4 x i32> %sub, <4 x i32>* %w, align 16
|
|
%35 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%36 = extractelement <4 x i32> %35, i64 0
|
|
%37 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%38 = extractelement <4 x i32> %37, i64 1
|
|
%39 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%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.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
|
|
%46 = freeze <4 x i32> %ashr
|
|
store <4 x i32> %46, <4 x i32>* %w, align 16
|
|
%47 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%48 = extractelement <4 x i32> %47, i64 0
|
|
%49 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%50 = extractelement <4 x i32> %49, i64 1
|
|
%51 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%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.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
|
|
%58 = freeze <4 x i32> %shl
|
|
store <4 x i32> %58, <4 x i32>* %w, align 16
|
|
%59 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%60 = extractelement <4 x i32> %59, i64 0
|
|
%61 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%62 = extractelement <4 x i32> %61, i64 1
|
|
%63 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%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.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
|
|
%70 = sext <4 x i1> %gt to <4 x i32>
|
|
store <4 x i32> %70, <4 x i32>* %w, align 16
|
|
%71 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%72 = extractelement <4 x i32> %71, i64 0
|
|
%73 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%74 = extractelement <4 x i32> %73, i64 1
|
|
%75 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%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.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
|
|
%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
|
|
%85 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%86 = extractelement <4 x i32> %85, i64 1
|
|
%87 = load <4 x i32>, <4 x i32>* %w, align 16
|
|
%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.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> <i32 2, i32 6, i32 2, i32 1>, <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
|
|
}
|