New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CBE doesn't support vectors yet #1498
Comments
Yep, you're right. The most straight-forward way to compile this is to emit code that uses the gcc -Chris |
I thought we were targeting C99, not GCC ? |
We already target "any compiler that supports the gcc extensions", e.g. due to intrinsics. There is no way for the CBE to produce abi-compliant code without using GCC extensions. If the CBE -Chris |
When this is fixed, these patches should be reverted: -Chris |
*** Bug llvm/llvm-bugzilla-archive#1930 has been marked as a duplicate of this bug. *** |
This is now done, the CBE generally supports vectors. |
mentioned in issue llvm/llvm-bugzilla-archive#1481 |
mentioned in issue llvm/llvm-bugzilla-archive#1930 |
mentioned in issue #1342 |
Extended Description
Noticed through inspection.
% cat cbev.ll
define <4 x i32> %foo(<4 x i32> %a, <4 x i32> %b) {
%c = sub <4 x i32> %a, %b
%d = add <4 x i32> %b, %c
%e = mul <4 x i32> %c, %d
; %f = udiv <4 x i32> %d, %e ; Fails an assertion in CBackend.cpp
; %g = sdiv <4 x i32> %e, %f ; Same
ret <4 x i32> %e
}
% llvm-as -o cbev.bc cbev.ll
% llc -march=c -o cbev.c cbev.bc
% tail -n 7 cbev.c
unsigned int foo(unsigned int ltmp_0_1[4], unsigned int ltmp_1_1[4])[4] {
unsigned int ltmp_2_1[4];
ltmp_2_1 = ltmp_0_1 - ltmp_1_1;
return (ltmp_2_1*(ltmp_1_1 + ltmp_2_1));
}
% gcc -o cbev.o -c cbev.c
cbev.c:106: error: ‘foo’ declared as function returning an array
cbev.c:107: warning: conflicting types for built-in function ‘malloc’
cbev.c:129: error: ‘foo’ declared as function returning an array
cbev.c: In function ‘foo’:
cbev.c:132: error: incompatible types in assignment
cbev.c:133: error: invalid operands to binary +
An error message, inserting a vector lowering pass before the CBE, or fixing the codegen would all be
improvements.
Emitting Altivec 'vector' types instead of arrays would make fixing the codegen relatively easy when
targetting PowerPC, since Altivec provides operator overloads for vector ops.
The text was updated successfully, but these errors were encountered: