[PATCH] D69542: Full Restrict Support - single patch

Jeroen Dobbelaere via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 28 18:02:18 PDT 2019


jeroen.dobbelaere created this revision.
Herald added subscribers: llvm-commits, jdoerfert, asbirlea, jfb, dexonsmith, steven_wu, george.burgess.iv, zzheng, hiraditya, mgorny, mehdi_amini.
Herald added a project: LLVM.

This is a convenience patch that covers all 38 patches starting from D68484 <https://reviews.llvm.org/D68484> through D68523 <https://reviews.llvm.org/D68523>. It implements the support for full C99 restrict in clang/llvm.

Any feedback about how it behaves on your benchmarks and testcases is welcome !

Any help with code review is also welcome. That should happen on the separate patches.

Note:  'SingleSource/Regression/C/gcc-c-torture/execute/GCC-C-execute-pr38212.test' in the 'test-suite' will be failing now as it depends on undefined behavior (reads and writes the same object through different restrict pointers that are visible in the same scope).


https://reviews.llvm.org/D69542

Files:
  clang/include/clang/AST/Type.h
  clang/include/clang/Basic/CodeGenOptions.def
  clang/include/clang/Driver/Options.td
  clang/lib/AST/Type.cpp
  clang/lib/CodeGen/Address.h
  clang/lib/CodeGen/CGCall.cpp
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGExpr.cpp
  clang/lib/CodeGen/CGExprAgg.cpp
  clang/lib/CodeGen/CGStmt.cpp
  clang/lib/CodeGen/CodeGenFunction.cpp
  clang/lib/CodeGen/CodeGenFunction.h
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/lib/Frontend/CompilerInvocation.cpp
  clang/test/CodeGen/arm_neon_intrinsics.c
  clang/test/CodeGen/restrict/arg_reuse.c
  clang/test/CodeGen/restrict/array.c
  clang/test/CodeGen/restrict/basic.c
  clang/test/CodeGen/restrict/basic_opt_01.c
  clang/test/CodeGen/restrict/basic_opt_02.c
  clang/test/CodeGen/restrict/basic_opt_03.c
  clang/test/CodeGen/restrict/basic_opt_04.c
  clang/test/CodeGen/restrict/escape_through_volatile.c
  clang/test/CodeGen/restrict/inlining_01.c
  clang/test/CodeGen/restrict/inlining_02.c
  clang/test/CodeGen/restrict/side_noalias_reduction_01.c
  clang/test/CodeGen/restrict/struct.c
  clang/test/CodeGen/restrict/struct_member_01.c
  clang/test/CodeGen/restrict/struct_member_02.c
  clang/test/CodeGen/restrict/struct_member_03.c
  clang/test/CodeGen/restrict/struct_member_04.c
  clang/test/CodeGen/restrict/struct_member_05.c
  clang/test/CodeGen/restrict/struct_member_06.c
  clang/test/CodeGen/restrict/struct_member_07.c
  clang/test/CodeGen/restrict/struct_member_08.cpp
  clang/test/OpenMP/master_taskloop_firstprivate_codegen.cpp
  clang/test/OpenMP/master_taskloop_lastprivate_codegen.cpp
  clang/test/OpenMP/master_taskloop_private_codegen.cpp
  clang/test/OpenMP/master_taskloop_simd_firstprivate_codegen.cpp
  clang/test/OpenMP/master_taskloop_simd_lastprivate_codegen.cpp
  clang/test/OpenMP/master_taskloop_simd_private_codegen.cpp
  clang/test/OpenMP/parallel_master_taskloop_firstprivate_codegen.cpp
  clang/test/OpenMP/parallel_master_taskloop_lastprivate_codegen.cpp
  clang/test/OpenMP/parallel_master_taskloop_private_codegen.cpp
  clang/test/OpenMP/task_codegen.cpp
  clang/test/OpenMP/task_firstprivate_codegen.cpp
  clang/test/OpenMP/task_private_codegen.cpp
  clang/test/OpenMP/taskloop_firstprivate_codegen.cpp
  clang/test/OpenMP/taskloop_lastprivate_codegen.cpp
  clang/test/OpenMP/taskloop_private_codegen.cpp
  clang/test/OpenMP/taskloop_simd_firstprivate_codegen.cpp
  clang/test/OpenMP/taskloop_simd_lastprivate_codegen.cpp
  clang/test/OpenMP/taskloop_simd_private_codegen.cpp
  llvm/docs/LangRef.rst
  llvm/include/llvm/Analysis/AliasSetTracker.h
  llvm/include/llvm/Analysis/BasicAliasAnalysis.h
  llvm/include/llvm/Analysis/ScopedNoAliasAA.h
  llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
  llvm/include/llvm/Analysis/ValueTracking.h
  llvm/include/llvm/Analysis/VectorUtils.h
  llvm/include/llvm/IR/IRBuilder.h
  llvm/include/llvm/IR/InstVisitor.h
  llvm/include/llvm/IR/Instruction.h
  llvm/include/llvm/IR/Instructions.h
  llvm/include/llvm/IR/IntrinsicInst.h
  llvm/include/llvm/IR/Intrinsics.h
  llvm/include/llvm/IR/Intrinsics.td
  llvm/include/llvm/IR/Metadata.h
  llvm/include/llvm/IR/User.h
  llvm/include/llvm/IR/Value.h
  llvm/include/llvm/InitializePasses.h
  llvm/include/llvm/LinkAllPasses.h
  llvm/include/llvm/Transforms/Scalar.h
  llvm/include/llvm/Transforms/Scalar/ConnectNoAliasDecl.h
  llvm/include/llvm/Transforms/Scalar/PropagateAndConvertNoAlias.h
  llvm/include/llvm/Transforms/Utils/Cloning.h
  llvm/include/llvm/Transforms/Utils/NoAliasUtils.h
  llvm/lib/Analysis/AliasSetTracker.cpp
  llvm/lib/Analysis/BasicAliasAnalysis.cpp
  llvm/lib/Analysis/CaptureTracking.cpp
  llvm/lib/Analysis/InstructionSimplify.cpp
  llvm/lib/Analysis/MemorySSA.cpp
  llvm/lib/Analysis/ScopedNoAliasAA.cpp
  llvm/lib/Analysis/TypeBasedAliasAnalysis.cpp
  llvm/lib/Analysis/ValueTracking.cpp
  llvm/lib/Analysis/VectorUtils.cpp
  llvm/lib/AsmParser/LLLexer.cpp
  llvm/lib/AsmParser/LLParser.cpp
  llvm/lib/AsmParser/LLParser.h
  llvm/lib/AsmParser/LLToken.h
  llvm/lib/CodeGen/IntrinsicLowering.cpp
  llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
  llvm/lib/IR/AsmWriter.cpp
  llvm/lib/IR/IRBuilder.cpp
  llvm/lib/IR/Instructions.cpp
  llvm/lib/IR/Metadata.cpp
  llvm/lib/IR/User.cpp
  llvm/lib/IR/Value.cpp
  llvm/lib/IR/Verifier.cpp
  llvm/lib/Passes/PassBuilder.cpp
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/IPO/ArgumentPromotion.cpp
  llvm/lib/Transforms/IPO/FunctionAttrs.cpp
  llvm/lib/Transforms/IPO/GlobalOpt.cpp
  llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
  llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
  llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
  llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
  llvm/lib/Transforms/Scalar/CMakeLists.txt
  llvm/lib/Transforms/Scalar/ConnectNoAliasDecl.cpp
  llvm/lib/Transforms/Scalar/EarlyCSE.cpp
  llvm/lib/Transforms/Scalar/GVN.cpp
  llvm/lib/Transforms/Scalar/JumpThreading.cpp
  llvm/lib/Transforms/Scalar/LICM.cpp
  llvm/lib/Transforms/Scalar/PropagateAndConvertNoAlias.cpp
  llvm/lib/Transforms/Scalar/SROA.cpp
  llvm/lib/Transforms/Scalar/Scalar.cpp
  llvm/lib/Transforms/Utils/CMakeLists.txt
  llvm/lib/Transforms/Utils/CloneFunction.cpp
  llvm/lib/Transforms/Utils/InlineFunction.cpp
  llvm/lib/Transforms/Utils/Local.cpp
  llvm/lib/Transforms/Utils/LoopRotationUtils.cpp
  llvm/lib/Transforms/Utils/LoopUnroll.cpp
  llvm/lib/Transforms/Utils/NoAliasUtils.cpp
  llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
  llvm/lib/Transforms/Utils/SimplifyCFG.cpp
  llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp
  llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
  llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
  llvm/test/Analysis/BasicAA/noalias-intr.ll
  llvm/test/Analysis/ScopedNoAliasAA/basic-domains.ll
  llvm/test/Analysis/ScopedNoAliasAA/basic2.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias-calls.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias-dup-scope.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias2.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias_basics.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias_member.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias_phi.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias_phi_in_loop.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias_recursive.ll
  llvm/test/Analysis/ScopedNoAliasAA/noalias_select.ll
  llvm/test/Bitcode/loadstore_sidechannel.ll
  llvm/test/CodeGen/Generic/noalias.ll
  llvm/test/CodeGen/Generic/side_noalias.ll
  llvm/test/Other/opt-O2-pipeline.ll
  llvm/test/Other/opt-O3-pipeline.ll
  llvm/test/Other/opt-Os-pipeline.ll
  llvm/test/Other/pass-pipelines.ll
  llvm/test/Transforms/ConnectNoAliasDecl/basictest.ll
  llvm/test/Transforms/Coroutines/ArgAddr.ll
  llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll
  llvm/test/Transforms/Coroutines/coro-retcon-value.ll
  llvm/test/Transforms/Coroutines/coro-retcon.ll
  llvm/test/Transforms/Coroutines/ex3.ll
  llvm/test/Transforms/EarlyCSE/basic.ll
  llvm/test/Transforms/FunctionAttrs/nocapture.ll
  llvm/test/Transforms/FunctionAttrs/nonnull.ll
  llvm/test/Transforms/Inline/launder.invariant.group.ll
  llvm/test/Transforms/Inline/noalias-calls.ll
  llvm/test/Transforms/Inline/noalias-scopes.ll
  llvm/test/Transforms/Inline/noalias.ll
  llvm/test/Transforms/Inline/noalias2.ll
  llvm/test/Transforms/Inline/parallel-loop-md-merge.ll
  llvm/test/Transforms/InstCombine/assume.ll
  llvm/test/Transforms/InstCombine/noalias.ll
  llvm/test/Transforms/InstSimplify/noalias.ll
  llvm/test/Transforms/LICM/noalias.ll
  llvm/test/Transforms/LoopRotate/noalias.ll
  llvm/test/Transforms/LoopUnroll/noalias.ll
  llvm/test/Transforms/LoopVectorize/noalias.ll
  llvm/test/Transforms/PropagateAndConvertNoAlias/basictest.ll
  llvm/test/Transforms/PropagateAndConvertNoAlias/call.ll
  llvm/test/Transforms/PropagateAndConvertNoAlias/degenerated.ll
  llvm/test/Transforms/PropagateAndConvertNoAlias/double_noalias.ll
  llvm/test/Transforms/PropagateAndConvertNoAlias/inlined.ll
  llvm/test/Transforms/PropagateAndConvertNoAlias/reduced01.ll
  llvm/test/Transforms/PropagateAndConvertNoAlias/select_and_phi.ll
  llvm/test/Transforms/PropagateAndConvertNoAlias/struct.ll
  llvm/test/Transforms/SLPVectorizer/noalias.ll
  llvm/test/Transforms/SROA/noalias.ll
  llvm/unittests/IR/IRBuilderTest.cpp





More information about the llvm-commits mailing list