<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p
{mso-style-priority:99;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
span.EmailStyle18
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-indent:9.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">The llvm 3.6 supporting is in process.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:9.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Beignet backend use LLVM IR as input, and llvm 3.6 will produce lots of new non-stander width integer IR, such as i3, i7 and more
large integers, need legalize in beignet, Ruiling has some changes and still working on it.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:9.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">To fully support the new llvm version, only pass the build is not enough. So beignet only support the released llvm, it is hard to
support llvm mainstream, for example llvm3.7.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks<o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></a></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> Beignet [mailto:beignet-bounces@lists.freedesktop.org]
<b>On Behalf Of </b>Paulo Dias<br>
<b>Sent:</b> Tuesday, February 3, 2015 02:33<br>
<b>To:</b> Yang, Rong R<br>
<b>Cc:</b> junyan.he@linux.intel.com; beignet@lists.freedesktop.org; Zhenyu Wang<br>
<b>Subject:</b> Re: [Beignet] beignet doesnt compile with LLVM 3.6<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Hi, im still unable to compile beignet with llvm 3.6/3.7 git.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I get this errors:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">In file included from /usr/lib/llvm-3.6/include/clang/AST/Decl.h:17:0,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /usr/lib/llvm-3.6/include/clang/AST/ASTTypeTraits.h:20,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /usr/lib/llvm-3.6/include/clang/AST/ASTContext.h:18,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /usr/lib/llvm-3.6/include/clang/Frontend/ASTUnit.h:18,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /usr/lib/llvm-3.6/include/clang/Frontend/FrontendAction.h:24,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /usr/lib/llvm-3.6/include/clang/CodeGen/CodeGenAction.h:13,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /home/groo/devel/intel/beignet/beignet/backend/src/backend/program.cpp:64:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APSInt& clang::APValue::getInt()’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:202:34: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return *(APSInt*)(char*)Data.buffer;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APFloat& clang::APValue::getFloat()’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:210:35: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return *(APFloat*)(char*)Data.buffer;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APSInt& clang::APValue::getComplexIntReal()’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:218:48: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((ComplexAPSInt*)(char*)Data.buffer)->Real;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APSInt& clang::APValue::getComplexIntImag()’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:226:48: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((ComplexAPSInt*)(char*)Data.buffer)->Imag;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APFloat& clang::APValue::getComplexFloatReal()’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:234:49: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((ComplexAPFloat*)(char*)Data.buffer)->Real;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue::APFloat& clang::APValue::getComplexFloatImag()’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:242:49: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((ComplexAPFloat*)(char*)Data.buffer)->Imag;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getVectorElt(unsigned int)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:261:38: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((Vec*)(char*)Data.buffer)->Elts[I];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getVectorLength() const’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:268:51: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((const Vec*)(const void *)Data.buffer)->NumElts;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getArrayInitializedElt(unsigned int)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:274:38: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((Arr*)(char*)Data.buffer)->Elts[I];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getArrayFiller()’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:285:38: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((Arr*)(char*)Data.buffer)->Elts[getArrayInitializedElts()];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getArrayInitializedElts() const’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:292:51: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((const Arr*)(const void *)Data.buffer)->NumElts;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getArraySize() const’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:296:51: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((const Arr*)(const void *)Data.buffer)->ArrSize;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getStructNumBases() const’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:301:57: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((const StructData*)(const char*)Data.buffer)->NumBases;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘unsigned int clang::APValue::getStructNumFields() const’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:305:57: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((const StructData*)(const char*)Data.buffer)->NumFields;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getStructBase(unsigned int)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:309:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((StructData*)(char*)Data.buffer)->Elts[i];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getStructField(unsigned int)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:313:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((StructData*)(char*)Data.buffer)->Elts[getStructNumBases() + i];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘const clang::FieldDecl* clang::APValue::getUnionField() const’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:324:56: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((const UnionData*)(const char*)Data.buffer)->Field;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘clang::APValue& clang::APValue::getUnionValue()’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:328:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return *((UnionData*)(char*)Data.buffer)->Value;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘const clang::AddrLabelExpr* clang::APValue::getAddrLabelDiffLHS() const’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:340:64: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((const AddrLabelDiffData*)(const char*)Data.buffer)->LHSExpr;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘const clang::AddrLabelExpr* clang::APValue::getAddrLabelDiffRHS() const’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:344:64: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return ((const AddrLabelDiffData*)(const char*)Data.buffer)->RHSExpr;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setInt(clang::APValue::APSInt)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:349:29: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> *(APSInt *)(char *)Data.buffer = std::move(I);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setFloat(clang::APValue::APFloat)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:353:30: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> *(APFloat *)(char *)Data.buffer = std::move(F);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setVector(const clang::APValue*, unsigned int)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:357:31: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((Vec*)(char*)Data.buffer)->Elts = new APValue[N];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:358:31: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((Vec*)(char*)Data.buffer)->NumElts = N;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:360:33: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((Vec*)(char*)Data.buffer)->Elts[i] = E[i];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setComplexInt(clang::APValue::APSInt, clang::APValue::APSInt)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:366:43: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((ComplexAPSInt *)(char *)Data.buffer)->Real = std::move(R);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:367:43: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((ComplexAPSInt *)(char *)Data.buffer)->Imag = std::move(I);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setComplexFloat(clang::APValue::APFloat, clang::APValue::APFloat)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:373:44: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((ComplexAPFloat *)(char *)Data.buffer)->Real = std::move(R);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:374:44: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((ComplexAPFloat *)(char *)Data.buffer)->Imag = std::move(I);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setUnion(const clang::FieldDecl*, const clang::APValue&)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:383:37: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((UnionData*)(char*)Data.buffer)->Field = Field;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:384:38: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> *((UnionData*)(char*)Data.buffer)->Value = Value;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h: In member function ‘void clang::APValue::setAddrLabelDiff(const clang::AddrLabelExpr*, const clang::AddrLabelExpr*)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:388:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((AddrLabelDiffData*)(char*)Data.buffer)->LHSExpr = LHSExpr;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/clang/AST/APValue.h:389:45: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ((AddrLabelDiffData*)(char*)Data.buffer)->RHSExpr = RHSExpr;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">In file included from /home/groo/devel/intel/beignet/beignet/backend/src/./sys/vector.hpp:28:0,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /home/groo/devel/intel/beignet/beignet/backend/src/./ir/register.hpp:27,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /home/groo/devel/intel/beignet/beignet/backend/src/./ir/instruction.hpp:27,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /home/groo/devel/intel/beignet/beignet/backend/src/./backend/context.hpp:23,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /home/groo/devel/intel/beignet/beignet/backend/src/backend/program.hpp:29,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> from /home/groo/devel/intel/beignet/beignet/backend/src/backend/program.cpp:26:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/llvm/Support/SpecialCaseList.h: At global scope:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/home/groo/devel/intel/beignet/beignet/backend/src/./sys/platform.hpp:263:12: error: expected ‘,’ or ‘...’ before ‘(’ token<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #define MB (KB*KB)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/llvm/Support/SpecialCaseList.h:67:70: note: in expansion of macro ‘MB’<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> static std::unique_ptr<SpecialCaseList> create(const MemoryBuffer *MB,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/home/groo/devel/intel/beignet/beignet/backend/src/./sys/platform.hpp:263:12: error: expected ‘,’ or ‘...’ before ‘(’ token<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #define MB (KB*KB)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/usr/lib/llvm-3.6/include/llvm/Support/SpecialCaseList.h:92:34: note: in expansion of macro ‘MB’<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> bool parse(const MemoryBuffer *MB, std::string &Error);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/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*)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/home/groo/devel/intel/beignet/beignet/backend/src/backend/program.cpp:624:44: error: cannot convert ‘std::unique_ptr<llvm::Module>’ to ‘llvm::Module*’ in initialization<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> llvm::Module *module = Act->takeModule();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">backend/src/CMakeFiles/<a href="http://gbe.dir/build.make:586">gbe.dir/build.make:586</a>: recipe for target 'backend/src/CMakeFiles/<a href="http://gbe.dir/backend/program.cpp.o">gbe.dir/backend/program.cpp.o</a>' failed<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">make[3]: *** [backend/src/CMakeFiles/<a href="http://gbe.dir/backend/program.cpp.o">gbe.dir/backend/program.cpp.o</a>] Error 1<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">make[3]: Leaving directory '/home/groo/devel/intel/beignet/beignet'<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">CMakeFiles/Makefile2:115: recipe for target 'backend/src/CMakeFiles/<a href="http://gbe.dir/all">gbe.dir/all</a>' failed<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">make[2]: *** [backend/src/CMakeFiles/<a href="http://gbe.dir/all">gbe.dir/all</a>] Error 2<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">can you take a look at this?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">thanks in advance :)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><br clear="all">
<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal">| Paulo Dias<o:p></o:p></p>
<div>
<p class="MsoNormal">| <a href="mailto:paulo.miguel.dias@gmail.com" target="_blank">
paulo.miguel.dias@gmail.com</a><o:p></o:p></p>
<p><b><i><span style="font-size:8.0pt;font-family:"Arial","sans-serif";background:white">Tempora mutantur, nos et mutamur in illis.</span></i></b><o:p></o:p></p>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Tue, Dec 16, 2014 at 12:19 AM, Yang, Rong R <<a href="mailto:rong.r.yang@intel.com" target="_blank">rong.r.yang@intel.com</a>> wrote:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-indent:9.0pt">
<span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I planned to support llvm3.6 before. But after fix all llvm3.6 compiler errors, there are some beignet’s utests fails.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-indent:9.0pt">
<span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Because llvm 3.6 seems has some bugs in that time and it’s release schedule delayed, I pending it.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-indent:9.0pt">
<span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Now, I will restart supporting and need some time.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a name="14a50e4d7f1b5df9__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span></a><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks</span><o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> Beignet [mailto:<a href="mailto:beignet-bounces@lists.freedesktop.org" target="_blank">beignet-bounces@lists.freedesktop.org</a>]
<b>On Behalf Of </b>Paulo Dias<br>
<b>Sent:</b> Monday, December 15, 2014 19:47<br>
<b>To:</b> Zhenyu Wang; Yang, Rong R<br>
<b>Cc:</b> <a href="mailto:junyan.he@linux.intel.com" target="_blank">junyan.he@linux.intel.com</a>;
<a href="mailto:beignet@lists.freedesktop.org" target="_blank">beignet@lists.freedesktop.org</a><br>
<b>Subject:</b> Re: [Beignet] beignet doesnt compile with LLVM 3.6</span><o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hi to you,<br>
<br>
sorry to bother you guys again, but llvm 3.6 is almost out and beignet still doesnt compile with the latest git:<o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">In file included from /home/groo/devel/intel/beignet/beignet/backend/src/./sys/vector.hpp:28:0,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> from /home/groo/devel/intel/beignet/beignet/backend/src/./ir/register.hpp:27,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> from /home/groo/devel/intel/beignet/beignet/backend/src/./ir/instruction.hpp:27,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> from /home/groo/devel/intel/beignet/beignet/backend/src/./backend/context.hpp:23,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> from /home/groo/devel/intel/beignet/beignet/backend/src/backend/program.hpp:29,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> from /home/groo/devel/intel/beignet/beignet/backend/src/backend/program.cpp:26:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">/usr/lib/llvm-3.6/include/llvm/Support/SpecialCaseList.h: At global scope:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">/home/groo/devel/intel/beignet/beignet/backend/src/./sys/platform.hpp:263:12: error: expected ‘,’ or ‘...’ before ‘(’ token<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> #define MB (KB*KB)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">/usr/lib/llvm-3.6/include/llvm/Support/SpecialCaseList.h:67:70: note: in expansion of macro ‘MB’<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> static std::unique_ptr<SpecialCaseList> create(const MemoryBuffer *MB,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">/home/groo/devel/intel/beignet/beignet/backend/src/./sys/platform.hpp:263:12: error: expected ‘,’ or ‘...’ before ‘(’ token<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> #define MB (KB*KB)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">/usr/lib/llvm-3.6/include/llvm/Support/SpecialCaseList.h:92:34: note: in expansion of macro ‘MB’<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> bool parse(const MemoryBuffer *MB, std::string &Error);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">/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*)’:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">/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<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> llvm::Module *module = Act->takeModule();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">backend/src/CMakeFiles/<a href="http://gbe.dir/build.make:586" target="_blank">gbe.dir/build.make:586</a>: recipe for target 'backend/src/CMakeFiles/<a href="http://gbe.dir/backend/program.cpp.o" target="_blank">gbe.dir/backend/program.cpp.o</a>'
failed<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">make[2]: *** [backend/src/CMakeFiles/<a href="http://gbe.dir/backend/program.cpp.o" target="_blank">gbe.dir/backend/program.cpp.o</a>] Error 1<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">CMakeFiles/Makefile2:114: recipe for target 'backend/src/CMakeFiles/<a href="http://gbe.dir/all" target="_blank">gbe.dir/all</a>' failed<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">could you guys take a look at it?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">thanks in advance<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Paulo Dias<o:p></o:p></p>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">On Tue Nov 04 2014 at 5:18:25 AM Zhenyu Wang <<a href="mailto:zhenyuw@linux.intel.com" target="_blank">zhenyuw@linux.intel.com</a>> wrote:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">On 2014.11.03 08:46:41 +0000, Yang, Rong R wrote:<br>
> Yes, some errors is because llvm use std:: unique_ptr as some function’s return<br>
> value instead of the normal ptr, there are some other errors after fix std::<br>
> unique_ptr error.<br>
><br>
> As we notice that LLVM plan to release LLVM/Clang 3.6 soon, suppose the LLVM<br>
> 3.6 approach to stable now, I am working to support LLVM 3.6 now. Hope could<br>
> finish it soon.<br>
><br>
<br>
One option is to explicitly say the llvm version that beignet does support<br>
and refuse to go on otherwise, like below one?<br>
<br>
From: Zhenyu Wang <<a href="mailto:zhenyuw@linux.intel.com" target="_blank">zhenyuw@linux.intel.com</a>><br>
Date: Tue, 4 Nov 2014 15:14:44 +0800<br>
Subject: [PATCH] Explicitly check LLVM version when building<br>
<br>
Instead of allowing for failure attemps to build with llvm unstable<br>
version this trys to explicitly tell the llvm version that beignet support.<br>
<br>
Signed-off-by: Zhenyu Wang <<a href="mailto:zhenyuw@linux.intel.com" target="_blank">zhenyuw@linux.intel.com</a>><br>
---<br>
CMakeLists.txt | 3 +++<br>
1 file changed, 3 insertions(+)<br>
<br>
diff --git a/CMakeLists.txt b/CMakeLists.txt<br>
index 40cb74c..7059b2b 100644<br>
--- a/CMakeLists.txt<br>
+++ b/CMakeLists.txt<br>
@@ -94,6 +94,9 @@ set (CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG -DGBE_DEBUG=0")<br>
# Front end stuff we need<br>
#INCLUDE(CMake/FindLLVM.cmake)<br>
Find_Package(LLVM 3.3)<br>
+IF(LLVM_VERSION VERSION_GREATER 3.5)<br>
+ MESSAGE(FATAL_ERROR "Don't support LLVM > 3.5 now.")<br>
+ENDIF(LLVM_VERSION VERSION_GREATER 3.5)<br>
<br>
set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${LLVM_LDFLAGS}")<br>
<br>
--<br>
2.1.1<br>
<br>
--<br>
Open Source Technology Center, Intel ltd.<br>
<br>
$gpg --keyserver <a href="http://wwwkeys.pgp.net" target="_blank">wwwkeys.pgp.net</a> --recv-keys 4D781827<o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
</body>
</html>