joerg added a comment. The other problem is that we don't use the CFG machinery to prune dead branches. Consider the x86 in/out instructions: one variant takes an immediate, the other a register. The classic way to deal with that is something like
static inline void outl(unsigned port, uint32_t value) { if (__builtin_constant_p(port) && port < 0x100) { __asm volatile("outl %0,%w1" : : "a" (data), "id" (port)); } else { __asm volatile("outl %0,%w1" : : "a" (data), "d" (port)); } } This fails with the new asm constraint checks, since the dead branch is never pruned. For other architectures it makes an even greater difference. The main reason it is a show stopper: there is no sane workaround that doesn't regress code quality. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58821/new/ https://reviews.llvm.org/D58821 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits