| Hi Hal, Thanks for the review! I have committed the renaming patch. Comments in-line and I’ve attached an updated patch for review
Removed.
Specifying something like vectorizea_width(enable/disable) is invalid and produces an error. Perhaps we could improve on the message: error: use of undeclared identifier ‘disable’. So the case statements should never be triggered. I’ll add unreachable() calls to make sure that is clear.
Yes, that is part of the reason for this change. "I noticed a problem with my implementation of #pragma clang loop vectorize(assume_safety). When it was specified on a loop other loop hints were lost. The problem is that CGLoopInfo attaches metadata a little bit differently than EmitCondBrHints in CGStmt. For do-loops CGLoopInfo attaches metadata to the br in the body block and for while and for loops, the inc block. EmitCondBrHints on the other hand always attaches data to the br in the cond block. When specifying assume_safety CGLoopInfo emits an empty llvm.loop metadata shadowing the metadata in the cond block. Loop transformations like rotate and unswitch would then eliminate the cond block.” So when vectorize(assume_safety) is specified EmitCondBrHints would add the loop hint vectorize.enable = true to the cond br. But that would be lost by loop transformations. There certainly are other methods of fixing this problem, but I think unifying how metadata is attached makes the most sense and is the best for llvm in the long term. I will post a patch for documentation of assume_safety once this problem has been fixed. Tyler |
0001-Moved-functionality-from-EmitCondBr-to-CGLoopInfo.patch
Description: Binary data
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
