<div>Actually, I'm not trying to build a vector from a subvector, I'm trying to cast a vector literal from one vector type to another.  But that's a good point that I didn't think of, checking the type of the parenthesized expression to see if it's a vector type.  I'll look into that next week.</div>

<div> </div>
<div>Also, regarding my problem with altivec.h, I was just going to ask the following question:</div>
<div> </div>
<div>Though the ALTIVECPIM.pdf doc says: "A vector literal is written as a parenthesized vector type followed by a parenthesized set of constant expressions."  I.e. (vector unsigned int)(1, 2, 3, 4)<br></div>
<div>However, should a non-constant expression like this be supported?:</div>
<div> </div>
<div>int a = 1;</div>
<div>(vector unsigned int)(1 + a, 2 + a, 3 + a, 4 + a)</div>
<div> </div>
<div>My PS3 gcc doesn't like it, but do any other compilers support this?  Or more importantly, should Clang/LLVM support it?</div>
<div> </div>
<div>-John<br></div>
<div class="gmail_quote">On Fri, Jun 25, 2010 at 5:21 PM, John McCall <span dir="ltr"><<a href="mailto:rjmccall@apple.com">rjmccall@apple.com</a>></span> wrote:<br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div style="WORD-WRAP: break-word">
<div>
<div class="im">
<div>On Jun 25, 2010, at 4:48 PM, John Thompson wrote:</div>
<blockquote type="cite">
<div>I have the first pass at a fix for bug 6895, which I also reported.  However, because of possible problems in altivec.h that are being looked into, it's not quite ready for prime time.  However, I'm hoping for some preliminary feedback to see if I'm on the right track.</div>

<div> </div>
<div>First, some background on the problem.</div>
<div> </div>
<div>Basically, the following produced an "cannot initialize a vector element of type '(type)'" error:</div>
<div><font size="2"></font> </div>
<div><font size="2">vector </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">char</font></font><font size="2"> v1 = (vector </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">char</font></font><font size="2">)((vector </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">int</font></font><font size="2">)(1, 2, 3, 4));</font></div>

<div><font size="2"></font> </div>
<div><font size="2">This was because the outer paren expression was trying to make a vector literal out of the inner, instead of making it a cast.  (See the original AltiVec standard at <a href="http://www.freescale.com/files/32bit/doc/ref_manual/ALTIVECPIM.pdf" target="_blank">http://www.freescale.com/files/32bit/doc/ref_manual/ALTIVECPIM.pdf</a>, section 2.5.2, where it actually discusses this case.)</font></div>

<div> </div>
<div>After straining my brain to figure out where the fix should go (I think it should be ActOnCastOfParenListExpr), this patch is what I came up with.</div>
<div> </div>
<div>Because I needed some way to determine if the initializers were arithmetic constants or not, I added a function to Expr, isArithmeticConstantExpr, which calls a static function of the same name, which I hacked up from a copy of the CheckICE function used by the isIntegerConstantExpression function.  (Is this plagerism?).  I'm not sure if it's exactly right, complete, or is overkill, but it seems to work for the few cases I've tried.  Is it reasonable to put it in Expr, or should it just be a static function in the one file I use it in?</div>
</blockquote>
<div><br></div></div>
<div>Is there a reason why the fix can't be "the operand is of vector type and therefore this is a vector cast and not a vector literal"?  I thought building vectors from subvectors was an OpenCL-ism not supported in AltiVec.</div>

<div><br></div><font color="#888888">
<div>John.</div></font></div></div></blockquote></div><br><br clear="all"><br>-- <br>John Thompson<br><a href="mailto:John.Thompson.JTSoftware@gmail.com">John.Thompson.JTSoftware@gmail.com</a><br><br>