Page MenuHomePhabricator

[PATCH 25/27] [noalias] Clang CodeGen for restrict-qualified pointers
Needs ReviewPublic

Authored by jeroen.dobbelaere on Oct 4 2019, 3:28 PM.

Details

Reviewers
hfinkel
jdoerfert
Summary

This is part of the series started by D68484.

Introduce support for restrict-qualified pointers as local variables,
as member of a struct, arrays of restrict-qualified pointers,
pointers to restrict qualified pointers.

The full support is enabled with '-ffull-restrict'.
Combine it with '-fno-noalias-arguments' to avoid putting the 'noalias'
attribute on restrict pointers used as argument. This combination is
needed to correctly support restrict arguments. It is kept as a separate option,
as in some cases, the stronger noalias attribute semantics result in better code.
(which also means that some analysis passes could still be made smarter).

Note: this is a stable point and tests should run fine with the patches applied up to this point.
Note: D68519 has been incorporated.

Diff Detail

Unit TestsFailed

TimeTest
34,170 msx64 debian > libFuzzer.libFuzzer::entropic-scale-per-exec-time.test
Script: -- : 'RUN: at line 2'; /var/lib/buildkite-agent/builds/llvm-project/build/./bin/clang --driver-mode=g++ -O2 -gline-tables-only -fsanitize=address,fuzzer -I/var/lib/buildkite-agent/builds/llvm-project/compiler-rt/lib/fuzzer -m64 /var/lib/buildkite-agent/builds/llvm-project/compiler-rt/test/fuzzer/EntropicScalePerExecTimeTest.cpp -o /var/lib/buildkite-agent/builds/llvm-project/build/projects/compiler-rt/test/fuzzer/X86_64DefaultLinuxConfig/Output/entropic-scale-per-exec-time.test.tmp-EntropicScalePerExecTimeTest

Event Timeline

Herald added a project: Restricted Project. · View Herald TranscriptOct 4 2019, 3:28 PM

Adapt CodeGen to std::vector<int64_t> indices (was std::vector<long long>).
Adapt tests to i64 p.objId (was i32).

erichkeane added inline comments.
clang/lib/AST/Type.cpp
116

Rather than this recursion, could you just unpack it from the CannonTy? So replace 107 with:

Type *CannonTy = getCanonicalType()->getBaseElementTypeUnsafe();

That way this is all unpacked and saves you a recursion.

jeroen.dobbelaere marked an inline comment as done.Oct 10 2019, 2:37 PM
jeroen.dobbelaere added inline comments.
clang/lib/AST/Type.cpp
116

Yes, that seems to work.

jeroen.dobbelaere marked an inline comment as done.Oct 11 2019, 6:21 AM
jeroen.dobbelaere added inline comments.
clang/include/clang/Driver/CC1Options.td
287 ↗(On Diff #223606)

I plan to move the options into the 'f_group'. These will then become: -fonly-restrict-arguments, -ffull-restrict and -fno-noalias-arguments.
I'll also be adding a '-fno-full-restrict' option, so that we can easily fall back to the legacy behavior when the default is toggled.

jeroen.dobbelaere marked an inline comment as done.Oct 14 2019, 6:34 AM

Speedup 'isRestrictOrContainsRestrictMembers' as hinted by Erich.
Moved options to the 'f_Group' and reworked the logic.

zahiraam added inline comments.
clang/lib/CodeGen/CGDecl.cpp
1933

Use of Twine would probably be good here?

clang/lib/CodeGen/CodeGenFunction.cpp
727

Remove the #if /#endif pair.

Use 'Twine', remove #if/#endif.

jeroen.dobbelaere edited the summary of this revision. (Show Details)

Rebased

jeroen.dobbelaere added a subscriber: alexey.zhikhar.

This update adds a c++ testcase for the problem reported by @alexey.zhikhar that was fixed in D68512#1909260

jeroen.dobbelaere retitled this revision from [PATCH 36/38] [noalias] Clang CodeGen for restrict-qualified pointers to [PATCH 24/26] [noalias] Clang CodeGen for restrict-qualified pointers.
jeroen.dobbelaere edited the summary of this revision. (Show Details)
jeroen.dobbelaere retitled this revision from [PATCH 24/26] [noalias] Clang CodeGen for restrict-qualified pointers to [PATCH 25/27] [noalias] Clang CodeGen for restrict-qualified pointers.

Rebased to 9fb46a452d4e5666828c95610ceac8dcd9e4ce16 (September 7, 2020)