simeon-imgtec created this revision. simeon-imgtec added reviewers: pcc, eli.friedman. simeon-imgtec created this object with visibility "All Users". Herald added subscribers: mattd, asavonic, jdoerfert, pengfei, hiraditya, jvesely. Herald added a project: All. simeon-imgtec requested review of this revision. Herald added a reviewer: jdoerfert. Herald added subscribers: llvm-commits, cfe-commits, jplehr, sstefan1. Herald added projects: clang, LLVM.
As out-of-bounds array accesses are undefined in C/C++ <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf>, we can capture this restriction using the newly introduced inrange attribute on individual GEP indices. The underlying motivation is that it would enable less conservative inferences in (basic) alias analysis, in turn improving passes such as GVN and LICM. As the inrange keyword is currently only supported on constant GEPs, we extend the support to GEP instructions, and mofiy clang to emit the inrange flag in an array subscript scenario where it is safe to do so. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D150192 Files: clang/lib/CodeGen/CGExpr.cpp clang/test/CodeGen/2005-01-02-ConstantInits.c clang/test/CodeGen/2010-07-14-ref-off-end.c clang/test/CodeGen/X86/va-arg-sse.c clang/test/CodeGen/builtin-align-array.c clang/test/CodeGen/exprs.c clang/test/CodeGen/matrix-type-operators.c clang/test/CodeGen/ubsan-pointer-overflow.c clang/test/CodeGen/unaligned-expr.c clang/test/CodeGen/union-tbaa1.c clang/test/CodeGen/vla.c clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp clang/test/CodeGenCXX/compound-literals.cpp clang/test/CodeGenCXX/cxx1z-decomposition.cpp clang/test/CodeGenCXX/lambda-expressions.cpp clang/test/CodeGenCXX/no-odr-use.cpp clang/test/CodeGenCXX/pr45964-decomp-transform.cpp clang/test/CodeGenObjC/arc.m clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl clang/test/OpenMP/align_clause_codegen.cpp clang/test/OpenMP/declare_mapper_codegen.cpp clang/test/OpenMP/distribute_firstprivate_codegen.cpp clang/test/OpenMP/distribute_lastprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_firstprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_lastprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_private_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_private_codegen.cpp clang/test/OpenMP/distribute_private_codegen.cpp clang/test/OpenMP/distribute_simd_firstprivate_codegen.cpp clang/test/OpenMP/distribute_simd_lastprivate_codegen.cpp clang/test/OpenMP/distribute_simd_private_codegen.cpp clang/test/OpenMP/for_firstprivate_codegen.cpp clang/test/OpenMP/for_lastprivate_codegen.cpp clang/test/OpenMP/for_private_codegen.cpp clang/test/OpenMP/for_reduction_codegen.cpp clang/test/OpenMP/for_reduction_codegen_UDR.cpp clang/test/OpenMP/for_scan_codegen.cpp clang/test/OpenMP/for_simd_scan_codegen.cpp clang/test/OpenMP/irbuilder_simd_aligned.cpp clang/test/OpenMP/master_taskloop_reduction_codegen.cpp clang/test/OpenMP/master_taskloop_simd_reduction_codegen.cpp clang/test/OpenMP/nvptx_distribute_parallel_generic_mode_codegen.cpp clang/test/OpenMP/nvptx_parallel_codegen.cpp clang/test/OpenMP/nvptx_parallel_for_codegen.cpp clang/test/OpenMP/nvptx_target_codegen.cpp clang/test/OpenMP/nvptx_target_parallel_codegen.cpp clang/test/OpenMP/nvptx_target_parallel_num_threads_codegen.cpp clang/test/OpenMP/nvptx_target_parallel_proc_bind_codegen.cpp clang/test/OpenMP/nvptx_target_simd_codegen.cpp clang/test/OpenMP/nvptx_target_teams_distribute_parallel_for_codegen.cpp clang/test/OpenMP/nvptx_target_teams_distribute_parallel_for_simd_codegen.cpp clang/test/OpenMP/nvptx_target_teams_distribute_simd_codegen.cpp clang/test/OpenMP/ordered_codegen.cpp clang/test/OpenMP/parallel_copyin_codegen.cpp clang/test/OpenMP/parallel_firstprivate_codegen.cpp clang/test/OpenMP/parallel_for_scan_codegen.cpp clang/test/OpenMP/parallel_for_simd_scan_codegen.cpp clang/test/OpenMP/parallel_master_taskloop_firstprivate_codegen.cpp clang/test/OpenMP/parallel_master_taskloop_reduction_codegen.cpp clang/test/OpenMP/parallel_master_taskloop_simd_firstprivate_codegen.cpp clang/test/OpenMP/parallel_master_taskloop_simd_lastprivate_codegen.cpp clang/test/OpenMP/parallel_master_taskloop_simd_reduction_codegen.cpp clang/test/OpenMP/parallel_private_codegen.cpp clang/test/OpenMP/parallel_reduction_codegen.cpp clang/test/OpenMP/reduction_implicit_map.cpp clang/test/OpenMP/sections_firstprivate_codegen.cpp clang/test/OpenMP/sections_lastprivate_codegen.cpp clang/test/OpenMP/sections_private_codegen.cpp clang/test/OpenMP/sections_reduction_codegen.cpp clang/test/OpenMP/single_firstprivate_codegen.cpp clang/test/OpenMP/single_private_codegen.cpp clang/test/OpenMP/target_codegen.cpp clang/test/OpenMP/target_data_use_device_addr_codegen.cpp clang/test/OpenMP/target_defaultmap_codegen_01.cpp clang/test/OpenMP/target_firstprivate_codegen.cpp clang/test/OpenMP/target_has_device_addr_codegen.cpp clang/test/OpenMP/target_has_device_addr_codegen_01.cpp clang/test/OpenMP/target_map_codegen_08.cpp clang/test/OpenMP/target_map_codegen_18.inc clang/test/OpenMP/target_map_member_expr_array_section_codegen.cpp clang/test/OpenMP/target_parallel_codegen.cpp clang/test/OpenMP/target_parallel_debug_codegen.cpp clang/test/OpenMP/target_parallel_for_codegen.cpp clang/test/OpenMP/target_parallel_for_debug_codegen.cpp clang/test/OpenMP/target_parallel_for_simd_codegen.cpp clang/test/OpenMP/target_private_codegen.cpp clang/test/OpenMP/target_reduction_codegen.cpp clang/test/OpenMP/target_teams_codegen.cpp clang/test/OpenMP/target_teams_distribute_codegen.cpp clang/test/OpenMP/target_teams_distribute_collapse_codegen.cpp clang/test/OpenMP/target_teams_distribute_dist_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_firstprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_lastprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_collapse_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_dist_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_firstprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_lastprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_private_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_collapse_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_dist_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_firstprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_lastprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_private_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_private_codegen.cpp clang/test/OpenMP/target_teams_distribute_reduction_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_collapse_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_dist_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_firstprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_lastprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_private_codegen.cpp clang/test/OpenMP/task_codegen.cpp clang/test/OpenMP/taskloop_reduction_codegen.cpp clang/test/OpenMP/taskloop_simd_reduction_codegen.cpp clang/test/OpenMP/teams_distribute_codegen.cpp clang/test/OpenMP/teams_distribute_collapse_codegen.cpp clang/test/OpenMP/teams_distribute_dist_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_firstprivate_codegen.cpp clang/test/OpenMP/teams_distribute_lastprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_collapse_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_copyin_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_dist_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_private_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_collapse_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_dist_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_private_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_private_codegen.cpp clang/test/OpenMP/teams_distribute_simd_codegen.cpp clang/test/OpenMP/teams_distribute_simd_collapse_codegen.cpp clang/test/OpenMP/teams_distribute_simd_dist_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_simd_firstprivate_codegen.cpp clang/test/OpenMP/teams_distribute_simd_lastprivate_codegen.cpp clang/test/OpenMP/teams_distribute_simd_private_codegen.cpp clang/test/OpenMP/teams_firstprivate_codegen.cpp clang/test/OpenMP/teams_private_codegen.cpp clang/test/OpenMP/threadprivate_codegen.cpp clang/test/SemaOpenCL/block-array-capturing.cl clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp.funcattrs.expected clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp.plain.expected clang/test/utils/update_cc_test_checks/Inputs/generated-funcs.c.generated.expected clang/test/utils/update_cc_test_checks/Inputs/generated-funcs.c.no-generated.expected llvm/include/llvm/IR/Instructions.h llvm/include/llvm/IR/Operator.h llvm/lib/AsmParser/LLParser.cpp llvm/lib/Bitcode/Reader/BitcodeReader.cpp llvm/lib/Bitcode/Writer/BitcodeWriter.cpp llvm/lib/IR/AsmWriter.cpp llvm/lib/IR/Instruction.cpp llvm/lib/IR/Instructions.cpp llvm/lib/Transforms/InstCombine/InstructionCombining.cpp _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits