[Beignet] beignet doesnt compile with LLVM 3.6

Yang, Rong R rong.r.yang at intel.com
Mon Nov 3 00:46:41 PST 2014


Yes, some errors is because llvm use std:: unique_ptr as some function’s return value instead of the normal ptr, there are some other errors after fix std:: unique_ptr error.
As we notice that LLVM plan to release LLVM/Clang 3.6 soon, suppose the LLVM 3.6 approach to stable now, I am working to support LLVM 3.6 now. Hope could finish it soon.

From: Paulo Dias [mailto:paulo.miguel.dias at gmail.com]
Sent: Friday, October 31, 2014 21:31
To: Yang, Rong R
Cc: beignet at lists.freedesktop.org; junyan.he at linux.intel.com
Subject: Re: beignet doesnt compile with LLVM 3.6


On Fri, Oct 31, 2014 at 1:05 AM, Yang, Rong R <rong.r.yang at intel.com<mailto:rong.r.yang at intel.com>> wrote:
HI, Paulo,

Nice to meet you:)
Do you use LLVM 3.6 to compile the Beignet’s C/C++ code?
Sorry, I mistake that you only use LLVM 3.6 as Beignet’s OpenCL language compiler.


That is correct, im trying to create ubuntu packages for beignet with latest mesa git + llvm 3.6, and like i reported, im getting compilations errors because of the new stricter c11 rules that llvm started to enforce (at least i think thats the cause of the miss compilation)


I have quick look these compilation. For strict-aliasing warning, I think it is the clang’s issue.
Because in beignet/backend/src/backend/program.cpp:59 only include the file CodeGenAction.h, and the all warnings are in clang internal.

MB conflict with LLV, I will fix it.

And convert ‘std::unique_ptr<llvm::Module>’ to ‘llvm::Module*’ error, it is caused by using LLVM 3.6 as Beignet’s OpenCL language compiler, because LLVM 3.6 haven’t officially released, Beignet don’t support it now.


I know its beyond your scope but could you send me a patch with fixes that allows me to cleanly compile beignet under llvm 3.6? radeon opencl uses llvm too and i caught several missbehaviours when using both opencl implementations that would be nice to report, once i get a working system running.


Thanks,
Yang, Rong

best regards


From: Paulo Dias [mailto:paulo.miguel.dias at gmail.com<mailto:paulo.miguel.dias at gmail.com>]
Sent: Thursday, October 30, 2014 10:49
To: Yang, Rong R
Cc: beignet at lists.freedesktop.org<mailto:beignet at lists.freedesktop.org>; junyan.he at linux.intel.com<mailto:junyan.he at linux.intel.com>
Subject: Re: beignet doesnt compile with LLVM 3.6

Hi Yang, nice to meet you.

I agree with LLVM changing code from the development branch, but in this case, the compilation is failing because they switched to a stricter language convention, so it might be wiser to fix the code sooner then later.

Im also creating beignet packages for future inclusion in ubuntu (im just a community contributor, not a canonical employee), and ive been testing beignet + opencl (mesa) for radeon and intel drivers. So it would help me alot if you guys could fix this compilation, since i have a few bugs i want to commit to you guys but i need to test latest mesa, intel, radeon code.

Best regards

| Paulo Dias
| paulo.miguel.dias at gmail.com<mailto:paulo.miguel.dias at gmail.com>

Tempora mutantur, nos et mutamur in illis.

On Thu, Oct 30, 2014 at 12:22 AM, Yang, Rong R <rong.r.yang at intel.com<mailto:rong.r.yang at intel.com>> wrote:
Because LLVM change the head file frequently, Beignet only support the released version LLVM, from 3.3 to 3.5. You can get this information from Beignet wiki: http://www.freedesktop.org/wiki/Software/Beignet/.

For any beignet question, you can send to the mailing list, beignet at lists.freedesktop.org<mailto:beignet at lists.freedesktop.org>, and send bug reports to https://bugs.freedesktop.org/enter_bug.cgi?product=Beignet.

Thanks,
Yang Rong

From: Paulo Dias [mailto:paulo.miguel.dias at gmail.com<mailto:paulo.miguel.dias at gmail.com>]
Sent: Wednesday, October 29, 2014 21:50
To: Yang, Rong R; junyan.he at linux.intel.com<mailto:junyan.he at linux.intel.com>
Subject: beignet doesnt compile with LLVM 3.6

Hi, sorry to bother you.

I've been trying to compile beignet from git with LLVM 3.6.
Unfortunatelly, with the new LLVM restrictions, beignet fails to compile, could you take a look at it?

BTW, what is the proper way to send bug reports? do you guys have a freenode irc channel?

here is the compilation output:

----

In file included from /usr/lib/llvm-3.6/include/clang/AST/Decl.h:17:0,
                 from /usr/lib/llvm-3.6/include/clang/AST/ASTTypeTraits.h:20,
                 from /usr/lib/llvm-3.6/include/clang/AST/ASTContext.h:18,
                 from /usr/lib/llvm-3.6/include/clang/Frontend/ASTUnit.h:18,
                 from /usr/lib/llvm-3.6/include/clang/Frontend/FrontendAction.h:24,
                 from /usr/lib/llvm-3.6/include/clang/CodeGen/CodeGenAction.h:13,
                 from /home/groo/devel/intel/beignet/beignet/backend/src/backend/program.cpp:59:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APSInt& clang::APValue::getInt()’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:202:34: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return *(APSInt*)(char*)Data.buffer;
                                  ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APFloat& clang::APValue::getFloat()’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:210:35: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return *(APFloat*)(char*)Data.buffer;
                                   ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APSInt& clang::APValue::getComplexIntReal()’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:218:48: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((ComplexAPSInt*)(char*)Data.buffer)->Real;
                                                ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APSInt& clang::APValue::getComplexIntImag()’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:226:48: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((ComplexAPSInt*)(char*)Data.buffer)->Imag;
                                                ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APFloat& clang::APValue::getComplexFloatReal()’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:234:49: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((ComplexAPFloat*)(char*)Data.buffer)->Real;
                                                 ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APFloat& clang::APValue::getComplexFloatImag()’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:242:49: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((ComplexAPFloat*)(char*)Data.buffer)->Imag;
                                                 ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getVectorElt(unsigned int)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:261:38: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((Vec*)(char*)Data.buffer)->Elts[I];
                                      ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getVectorLength() const’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:268:51: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((const Vec*)(const void *)Data.buffer)->NumElts;
                                                   ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getArrayInitializedElt(unsigned int)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:274:38: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((Arr*)(char*)Data.buffer)->Elts[I];
                                      ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getArrayFiller()’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:285:38: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((Arr*)(char*)Data.buffer)->Elts[getArrayInitializedElts()];
                                      ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getArrayInitializedElts() const’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:292:51: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((const Arr*)(const void *)Data.buffer)->NumElts;
                                                   ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getArraySize() const’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:296:51: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((const Arr*)(const void *)Data.buffer)->ArrSize;
                                                   ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getStructNumBases() const’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:301:57: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((const StructData*)(const char*)Data.buffer)->NumBases;
                                                         ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getStructNumFields() const’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:305:57: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((const StructData*)(const char*)Data.buffer)->NumFields;
                                                         ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getStructBase(unsigned int)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:309:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((StructData*)(char*)Data.buffer)->Elts[i];
                                             ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getStructField(unsigned int)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:313:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((StructData*)(char*)Data.buffer)->Elts[getStructNumBases() + i];
                                             ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘const clang::FieldDecl* clang::APValue::getUnionField() const’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:324:56: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((const UnionData*)(const char*)Data.buffer)->Field;
                                                        ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getUnionValue()’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:328:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return *((UnionData*)(char*)Data.buffer)->Value;
                                             ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘const clang::AddrLabelExpr* clang::APValue::getAddrLabelDiffLHS() const’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:340:64: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((const AddrLabelDiffData*)(const char*)Data.buffer)->LHSExpr;
                                                                ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘const clang::AddrLabelExpr* clang::APValue::getAddrLabelDiffRHS() const’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:344:64: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return ((const AddrLabelDiffData*)(const char*)Data.buffer)->RHSExpr;
                                                                ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setInt(clang::APValue::APSInt)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:349:29: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(APSInt *)(char *)Data.buffer = std::move(I);
                             ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setFloat(clang::APValue::APFloat)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:353:30: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(APFloat *)(char *)Data.buffer = std::move(F);
                              ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setVector(const clang::APValue*, unsigned int)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:357:31: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     ((Vec*)(char*)Data.buffer)->Elts = new APValue[N];
                               ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:358:31: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     ((Vec*)(char*)Data.buffer)->NumElts = N;
                               ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:360:33: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
       ((Vec*)(char*)Data.buffer)->Elts[i] = E[i];
                                 ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setComplexInt(clang::APValue::APSInt, clang::APValue::APSInt)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:366:43: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     ((ComplexAPSInt *)(char *)Data.buffer)->Real = std::move(R);
                                           ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:367:43: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     ((ComplexAPSInt *)(char *)Data.buffer)->Imag = std::move(I);
                                           ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setComplexFloat(clang::APValue::APFloat, clang::APValue::APFloat)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:373:44: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     ((ComplexAPFloat *)(char *)Data.buffer)->Real = std::move(R);
                                            ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:374:44: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     ((ComplexAPFloat *)(char *)Data.buffer)->Imag = std::move(I);
                                            ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setUnion(const clang::FieldDecl*, const clang::APValue&)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:383:37: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     ((UnionData*)(char*)Data.buffer)->Field = Field;
                                     ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:384:38: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *((UnionData*)(char*)Data.buffer)->Value = Value;
                                      ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setAddrLabelDiff(const clang::AddrLabelExpr*, const clang::AddrLabelExpr*)’:
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:388:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     ((AddrLabelDiffData*)(char*)Data.buffer)->LHSExpr = LHSExpr;
                                             ^
/usr/lib/llvm-3.6/include/clang/AST/APValue.h:389:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     ((AddrLabelDiffData*)(char*)Data.buffer)->RHSExpr = RHSExpr;
                                             ^
In file included from /home/groo/devel/intel/beignet/beignet/backend/src/./sys/vector.hpp:28:0,
                 from /home/groo/devel/intel/beignet/beignet/backend/src/./ir/register.hpp:27,
                 from /home/groo/devel/intel/beignet/beignet/backend/src/./ir/instruction.hpp:27,
                 from /home/groo/devel/intel/beignet/beignet/backend/src/./backend/context.hpp:23,
                 from /home/groo/devel/intel/beignet/beignet/backend/src/backend/program.hpp:29,
                 from /home/groo/devel/intel/beignet/beignet/backend/src/backend/program.cpp:26:
/usr/lib/llvm-3.6/include/llvm/Support/SpecialCaseList.h: At global scope:
/home/groo/devel/intel/beignet/beignet/backend/src/./sys/platform.hpp:263:12: error: expected ‘,’ or ‘...’ before ‘(’ token
 #define MB (KB*KB)
            ^
/usr/lib/llvm-3.6/include/llvm/Support/SpecialCaseList.h:67:70: note: in expansion of macro ‘MB’
   static std::unique_ptr<SpecialCaseList> create(const MemoryBuffer *MB,
                                                                      ^
/home/groo/devel/intel/beignet/beignet/backend/src/./sys/platform.hpp:263:12: error: expected ‘,’ or ‘...’ before ‘(’ token
 #define MB (KB*KB)
            ^
/usr/lib/llvm-3.6/include/llvm/Support/SpecialCaseList.h:92:34: note: in expansion of macro ‘MB’
   bool parse(const MemoryBuffer *MB, std::string &Error);
                                  ^
/home/groo/devel/intel/beignet/beignet/backend/src/backend/program.cpp: In function ‘bool gbe::buildModuleFromSource(const char*, llvm::Module**, llvm::LLVMContext*, std::vector<std::basic_string<char> >&, size_t, char*, size_t*)’:
/home/groo/devel/intel/beignet/beignet/backend/src/backend/program.cpp:614:44: error: cannot convert ‘std::unique_ptr<llvm::Module>’ to ‘llvm::Module*’ in initialization
     llvm::Module *module = Act->takeModule();
                                            ^
backend/src/CMakeFiles/gbe.dir/build.make:583<http://gbe.dir/build.make:583>: recipe for target 'backend/src/CMakeFiles/gbe.dir/backend/program.cpp.o<http://gbe.dir/backend/program.cpp.o>' failed
make[3]: *** [backend/src/CMakeFiles/gbe.dir/backend/program.cpp.o<http://gbe.dir/backend/program.cpp.o>] Error 1
---
best regards

| Paulo Dias
| paulo.miguel.dias at gmail.com<mailto:paulo.miguel.dias at gmail.com>

Tempora mutantur, nos et mutamur in illis.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/beignet/attachments/20141103/cb4a826a/attachment-0001.html>


More information about the Beignet mailing list