svenvh added inline comments.

================
Comment at: clang/lib/CodeGen/CGExprScalar.cpp:4789
-
-    if (!CGF.CGM.getCodeGenOpts().PreserveVec3Type) {
-      Src = createCastsForTypeOfSameSize(Builder, CGF.CGM.getDataLayout(), Src,
----------------
Anastasia wrote:
> While I agree with this fix and it obviously looks incorrect, I wonder if the 
> original intent was to condition the previous statement instead so that we 
> avoid converting to size 4 at all? Although I have a feeling we are entering 
> the behavior that is not documented anywhere. In the spec I can see this:
> 
> 
> ```
> When the operand and result type contain a different number of elements, the 
> result shall be implementation-defined except if the operand is a 4-component 
> vector and the result is a 3-component vector. In this case, the bits in the 
> operand shall be returned directly without modification as the new type. 
> ```
> 
> but it seems to cover the inverse conversion?
Yeah I have a similar fix for the inverse case (which is further down in this 
function) in my local branch.

I did try to extend the guard to also cover the `ConvertVec3AndVec4` call, but 
that also led to invalid StoreInst creation.  Since I wasn't sure about the 
intent of the conditioning on `PreserveVec3Type` here, I didn't investigate 
further.

I was hoping @jaykang10 (who added this in D30810) might have some insight into 
why the guard was here in the first place.  But it has been over 4 years since 
that was committed, so there might not be a ready answer.  Either way, I'll 
hold off committing this for a few more days.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107963/new/

https://reviews.llvm.org/D107963

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to