================
@@ -0,0 +1,36 @@
+// RUN: %clang_cc1 %s -O0 -fsanitize=shift-exponent -emit-llvm -o - | 
FileCheck %s
+
+// Checking that the code generation is using the unextended/untruncated
+// exponent values and capping the values accordingly
+
+// CHECK-LABEL: define{{.*}} i32 @test_left_variable
+int test_left_variable(unsigned _BitInt(5) b, unsigned _BitInt(2) e) {
+  // CHECK: [[E_REG:%.+]] = load [[E_SIZE:i2]]
+  // CHECK: icmp ule [[E_SIZE]] [[E_REG]], -1
----------------
AdamMagierFOSS wrote:

I tried to include this type of optimization in this patch but there's an 
assert that expects a check to be generated when the shift-exponent check is 
enabled. I suppose it wouldn't be too difficult to refactor this but from what 
I can tell none of the UBSan checks are really optimized in this way and 
instead rely on the middle end to optimize this out (e.g. the array-bounds 
check still generates a check on an array of size 256 when indexing with 
`uint8_t`). Don't know how much of an impact this type of pre-emptive 
optimization would have either.

https://github.com/llvm/llvm-project/pull/80515
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to