<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=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-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;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
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>Hi,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The ldN like intrinsics (including all the ld1xN, ldN, ldNlane, ldNr, stN, stNlane) can use any pointer types. The definition (in IntrinsicsAArch64.td) of such intrinsics use ‘LLVMAnyPointerType’, which means we can pass any pointer type to such intrinsics.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>E.g. I tried following case ld2.ll:<o:p></o:p></p><p class=MsoNormal>define { <4 x i32>, <4 x i32> } @test(float* %ptr) {<o:p></o:p></p><p class=MsoNormal>  %vld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0f32(float* %ptr)<o:p></o:p></p><p class=MsoNormal>  ret { <4 x i32>, <4 x i32> } %vld2<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal>declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0f32(float*)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>It can pass and generate ld2 with “llc –march=aarch64 < ld2.ll”.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I just think it’s strange that the pointer has no relationship with the returned type. Currently there are IR regression test cases using different kinds of pointers like ‘xx.ld2.v4i32.p0i32’, ‘xx.ld2.v4i32.p0v4i32’ or ‘xx.ld2.v4i32.p0i8’, which looks confusing. Should we modify the definition of such intrinsics and restrict the pointer type?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>If you agree with me, I suggest to use a pointer type to the vector element. Because the ‘arm_neon.h’ declare the ld2 intrinsic like ‘int32x2x2_t vld2_s32(int32_t const * ptr)’, which also uses a pointer to the vector element. To achieve this is easy, I have a patch to add a constraint ‘PointerToVectorElt’ in ‘intrinsics.td’. I just wonder if such modification is reasonable.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,<o:p></o:p></p><p class=MsoNormal>-Hao<o:p></o:p></p></div></body></html>