platform/upstream/llvm.git
4 years ago[DWARFYAML] Add dependency 'BinaryFormat'. NFC.
Xing GUO [Mon, 20 Jul 2020 05:56:04 +0000 (13:56 +0800)]
[DWARFYAML] Add dependency 'BinaryFormat'. NFC.

This patch is trying to fix build failure.

Failed tests:
http://lab.llvm.org:8011/builders/clang-ppc64le-linux-multistage/builds/12574

4 years ago[ORC] Refactor TrampolinePool to reduce virtual function calls.
Lang Hames [Mon, 20 Jul 2020 05:33:27 +0000 (22:33 -0700)]
[ORC] Refactor TrampolinePool to reduce virtual function calls.

Virtual function calls are now only made when the pool needs to be
grown to accommodate o new request.

4 years ago[lldb][NFC] Make some RegularExpression constructor calls less verbose
Raphael Isemann [Mon, 20 Jul 2020 05:10:41 +0000 (07:10 +0200)]
[lldb][NFC] Make some RegularExpression constructor calls less verbose

4 years ago[DWARFYAML] Remove 'default' tag. NFC.
Xing GUO [Mon, 20 Jul 2020 03:12:32 +0000 (11:12 +0800)]
[DWARFYAML] Remove 'default' tag. NFC.

This patch is trying to make build bots happy.

Failed bots:
http://lab.llvm.org:8011/builders/ppc64le-lld-multistage-test/builds/10705
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/builds/33595

4 years ago[JITLink][MachO] Tidy up debugging output for relocation parsing.
Lang Hames [Mon, 20 Jul 2020 02:33:49 +0000 (19:33 -0700)]
[JITLink][MachO] Tidy up debugging output for relocation parsing.

Identify relocations by (section name, offset) pairs, rather than plain
vmaddrs. This makes it easier to cross-reference debugging output for
relocations with output from standard object inspection tools (otool,
readelf, objdump, etc.).

4 years ago[DWARFYAML] Implement the .debug_rnglists section.
Xing GUO [Mon, 20 Jul 2020 02:42:27 +0000 (10:42 +0800)]
[DWARFYAML] Implement the .debug_rnglists section.

This patch implements the .debug_rnglists section. We are able to
produce the .debug_rnglists section by the following syntax.

```
debug_rnglists:
  - Format:              DWARF32 ## Optional
    Length:              0x1234  ## Optional
    Version:             5       ## Optional
    AddressSize:         0x08    ## Optional
    SegmentSelectorSize: 0x00    ## Optional
    OffsetEntryCount:    2       ## Optional
    Offsets:             [1, 2]  ## Optional
    Lists:
      - Entries:
          - Operator: DW_RLE_base_address
            Values:   [ 0x1234 ]
```

The generated .debug_rnglists is verified by llvm-dwarfdump, except for
the operator DW_RLE_startx_endx, since llvm-dwarfdump doesn't support
it.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D83624

4 years ago[ValueTracking] Let isGuaranteedNotToBeUndefOrPoison use canCreateUndefOrPoison
Juneyoung Lee [Mon, 20 Jul 2020 00:21:28 +0000 (09:21 +0900)]
[ValueTracking] Let isGuaranteedNotToBeUndefOrPoison use canCreateUndefOrPoison

 This patch adds support more operations.

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D83926

4 years ago[Utils][Fix] remove unnecessary ; at the end
sstefan1 [Sun, 19 Jul 2020 18:45:24 +0000 (20:45 +0200)]
[Utils][Fix] remove unnecessary ; at the end

4 years ago[Utils] Check function attributes in update_test_checks
sstefan1 [Sat, 11 Jul 2020 19:53:50 +0000 (21:53 +0200)]
[Utils] Check function attributes in update_test_checks

Summary:
This introduces new flag to the update_test_checks and
update_cc_test_checks that allows for function attributes
to be checked in a check-line. If the flag is not set,
the behavior should remain the same.

Reviewers: jdoerfert

Subscribers: arichardson, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D83629

4 years ago[JITLink][MachO] Fix handling of non-extern UNSIGNED pair of SUBTRACTOR relocs.
Lang Hames [Sun, 19 Jul 2020 03:43:13 +0000 (20:43 -0700)]
[JITLink][MachO] Fix handling of non-extern UNSIGNED pair of SUBTRACTOR relocs.

When processing a MachO SUBTRACTOR/UNSIGNED pair, if the UNSIGNED target
is non-extern then check the r_symbolnum field of the relocation to find
the targeted section and use the section's address to find 'ToSymbol'.

Previously 'ToSymbol' was found by loading the initial value stored at
the fixup location and treating this as an address to search for. This
is incorrect, however: the initial value includes the addend and will
point to the wrong block if the addend is less than zero or greater than
the block size.

rdar://65756694

4 years agoFix ValueTrackingTest.cpp to use pair instead of tuple
Juneyoung Lee [Sun, 19 Jul 2020 17:21:52 +0000 (02:21 +0900)]
Fix ValueTrackingTest.cpp to use pair instead of tuple

4 years ago[ConstantFolding] check applicability of AllOnes constant creation first
Jameson Nash [Wed, 15 Jul 2020 13:17:42 +0000 (09:17 -0400)]
[ConstantFolding] check applicability of AllOnes constant creation first

The getAllOnesValue can only handle things that are bitcast from a
ConstantInt, while here we bitcast through a pointer, so we may see more
complex objects (like Array or Struct).

Differential Revision: https://reviews.llvm.org/D83870

4 years ago[llvm-reduce] Fix incorrect indices in argument reduction pass
Alex Richardson [Sun, 19 Jul 2020 16:24:57 +0000 (17:24 +0100)]
[llvm-reduce] Fix incorrect indices in argument reduction pass

The function extractArgumentsFromModule() was passing a one-based index to,
but replaceFunctionCalls() was expecting a zero-based argument index. This
resulted in assertion errors when reducing function call arguments with
different types. Additionally, the

Reviewed By: lebedev.ri

Differential Revision: https://reviews.llvm.org/D84099

4 years ago[llvm][NFC] Add missing 'override'
Logan Smith [Sun, 19 Jul 2020 16:35:29 +0000 (09:35 -0700)]
[llvm][NFC] Add missing 'override'

4 years ago[ValueTracking] Add canCreateUndefOrPoison & let canCreatePoison use Operator
Juneyoung Lee [Sun, 19 Jul 2020 16:23:58 +0000 (01:23 +0900)]
[ValueTracking] Add canCreateUndefOrPoison & let canCreatePoison use Operator

This patch
- adds `canCreateUndefOrPoison`
- refactors `canCreatePoison` so it can deal with constantexprs

`canCreateUndefOrPoison` will be used at D83926.

Reviewed By: nikic, jdoerfert

Differential Revision: https://reviews.llvm.org/D84007

4 years ago[clang] Fix the warning for a non-void consteval function without a return value...
Bruno Ricci [Sun, 19 Jul 2020 16:08:17 +0000 (17:08 +0100)]
[clang] Fix the warning for a non-void consteval function without a return value to actually say "consteval".

This warning was modified in 796ed03b8412 to use the term "consteval"
for consteval functions. However the warning has never worked as
intended since the diagnostic's arguments are used in the wrong order.

This was unfortunately missed by 796ed03b8412 since no test did exercise
this specific warning.

Additionally send the NamedDecl* into the diagnostic instead of just the
IdentifierInfo* to correctly work with special names and template
arguments.

4 years ago[clang] Disable a few formatting options for test/
Bruno Ricci [Sun, 19 Jul 2020 15:53:59 +0000 (16:53 +0100)]
[clang] Disable a few formatting options for test/

Hopefully this will make the bot a little less noisy. Rationale for each:

AlignTrailingComments: We don't want to force-align the various expected-error
                       and friends.

CommentPragmas:       Tell clang-format to leave the "// CHECK:" and the
                      "// expected-" alone.

AlwaysBreakTemplateDeclarations: Templates in tests often have no break between
                                 the template-head and the declaration.

Differential Revision: https://reviews.llvm.org/D83901

4 years agoRevert "[InlineAdvisor] New inliner advisor to replay inlining from optimization...
Wenlei He [Sun, 19 Jul 2020 15:49:04 +0000 (08:49 -0700)]
Revert "[InlineAdvisor] New inliner advisor to replay inlining from optimization remarks"

This reverts commit 2d6ecfa168c2d36ac88efc854f19b05d1c540ded.

4 years ago[InlineAdvisor] New inliner advisor to replay inlining from optimization remarks
Wenlei He [Fri, 17 Jul 2020 23:35:56 +0000 (16:35 -0700)]
[InlineAdvisor] New inliner advisor to replay inlining from optimization remarks

Summary:
This change added a new inline advisor that takes optimization remarks from previous inlining as input, and provides the decision as advice so current inlining can replay inline decisions of a different compilation. Dwarf inline stack with line and discriminator is used as anchor for call sites including call context. The change can be useful for Inliner tuning as it provides a channel to allow external input for tweaking inline decisions. Existing alternatives like alwaysinline attribute is per-function, not per-callsite. Per-callsite inline intrinsic can be another solution (not yet existing), but it's intrusive to implement and also does not differentiate call context.

A switch -sample-profile-inline-replay=<inline_remarks_file> is added to hook up the new inline advisor with SampleProfileLoader's inline decision for replay. Since SampleProfileLoader does top-down inlining, inline decision can be specialized for each call context, hence we should be able to replay inlining accurately. However with a bottom-up inliner like CGSCC inlining, the replay can be limited due to lack of specialization for different call context. Apart from that limitation, the new inline advisor can still be used by regular CGSCC inliner later if needed for tuning purpose.

Subscribers: mgorny, aprantl, hiraditya, llvm-commits

Tags: #llvm

Resubmit for https://reviews.llvm.org/D84086

4 years agoSilence a "logical operation on address of string constant" via CMake instead.
Aaron Ballman [Sun, 19 Jul 2020 15:19:48 +0000 (11:19 -0400)]
Silence a "logical operation on address of string constant" via CMake instead.

4 years agoRevert 7dfff42f019583076c55993d30a63889613922dd as it broke non-Windows builds.
Aaron Ballman [Sun, 19 Jul 2020 15:12:39 +0000 (11:12 -0400)]
Revert 7dfff42f019583076c55993d30a63889613922dd as it broke non-Windows builds.

4 years agoSilencing some 'logical operation on address of string constant diagnostics; NFC
Aaron Ballman [Sun, 19 Jul 2020 14:50:51 +0000 (10:50 -0400)]
Silencing some 'logical operation on address of string constant diagnostics; NFC

4 years ago[x86] split FMA with fast-math-flags to avoid libcall
Sanjay Patel [Sun, 19 Jul 2020 14:03:55 +0000 (10:03 -0400)]
[x86] split FMA with fast-math-flags to avoid libcall

fma reassoc A, B, C --> fadd (fmul A, B), C (when target has no FMA hardware)

C/C++ code may use explicit fma() calls (which become LLVM fma
intrinsics in IR) but then gets compiled with -ffast-math or similar.
For targets that do not have FMA hardware, we don't want to go out to
the math library for a precise but slow FMA result.

I tried this as a generic DAGCombine, but it caused infinite looping
on more than 1 other target, so there's likely some over-reaching fma
formation happening.

There's also a potential intersection of strict FP with fast-math here.
Deferring to current behavior for that case (assuming that strict-ness
overrides fast-ness).

Differential Revision: https://reviews.llvm.org/D83981

4 years agoReland "[InstCombine] Lower infinite combine loop detection thresholds"
Roman Lebedev [Sun, 19 Jul 2020 13:37:03 +0000 (16:37 +0300)]
Reland "[InstCombine] Lower infinite combine loop detection thresholds"

This reverts commit 4500db8c59621a31c622862a2946457fdee481ce,
which was reverted because lower thresholds exposed a new issue (PR46680).

Now that it was resolved by d12ec0f752e7f2c7f7252539da2d124264ec33f7,
we can reinstate lower limits and wait for a new bugreport before
reverting this again...

4 years ago[PredicateInfo] Add a method to interpret predicate as cmp constraint
Nikita Popov [Thu, 9 Jul 2020 20:52:50 +0000 (22:52 +0200)]
[PredicateInfo] Add a method to interpret predicate as cmp constraint

Both users of predicteinfo (NewGVN and SCCP) are interested in
getting a cmp constraint on the predicated value. They currently
implement separate logic for this. This patch adds a common method
for this in PredicateBase.

This enables a missing bit of PredicateInfo handling in SCCP: Now
the predicate on the condition itself is also used. For switches
it means we know that the switched-on value is the same as the case
value. For assumes/branches we know that the condition is true or
false.

Differential Revision: https://reviews.llvm.org/D83640

4 years ago[NFCI][GVN] Make IsValueFullyAvailableInBlock() readable - use enum class instead...
Roman Lebedev [Sun, 19 Jul 2020 13:09:46 +0000 (16:09 +0300)]
[NFCI][GVN] Make IsValueFullyAvailableInBlock() readable - use enum class instead of magic numbers

This does not change any logic, it only wraps the magic 0/1/2/3 constants
into an enum class.

4 years ago[InstSimplify] fold fcmp with infinity constant using isKnownNeverInfinity
Sanjay Patel [Sun, 19 Jul 2020 13:24:03 +0000 (09:24 -0400)]
[InstSimplify] fold fcmp with infinity constant using isKnownNeverInfinity

This is a step towards trying to remove unnecessary FP compares
with infinity when compiling with -ffinite-math-only or similar.
I'm intentionally not checking FMF on the fcmp itself because
I'm assuming that will go away eventually.
The analysis part of this was added with rGcd481136 for use with
isKnownNeverNaN. Similarly, that could be an enhancement here to
get predicates like 'one' and 'ueq'.

Differential Revision: https://reviews.llvm.org/D84035

4 years ago[InstCombine] Fix store merge worklist management (PR46680)
Nikita Popov [Sat, 18 Jul 2020 20:22:41 +0000 (22:22 +0200)]
[InstCombine] Fix store merge worklist management (PR46680)

Fixes https://bugs.llvm.org/show_bug.cgi?id=46680.

Just like insertions through IRBuilder, InsertNewInstBefore()
should be using the deferred worklist mechanism, so that processing
of newly added instructions is prioritized.

There's one side-effect of the worklist order change which could be
classified as a regression. An add op gets pushed through a select
that at the time is not a umax. We could add a reverse transform
that tries to push adds in the reverse direction to restore a min/max,
but that seems like a sure way of getting infinite loops... Seems
like something that should best wait on min/max intrinsics.

Differential Revision: https://reviews.llvm.org/D84109

4 years ago[ARM] Don't mark vctp as having sideeffects
David Green [Thu, 16 Jul 2020 09:36:23 +0000 (10:36 +0100)]
[ARM] Don't mark vctp as having sideeffects

As far as I can tell, it should not be necessary for VCTP to be
unpredictable in tail predicated loops. Either it has a a valid loop
counter as a operand which will naturally keep it in the right loop, or
it doesn't and it won't be converted to a tail predicated loop. Not
marking it as having side effects allows it to be scheduled more cleanly
for cases where it is not expected to become a tail predicate loop.

Differential Revision: https://reviews.llvm.org/D83907

4 years ago[llvm-cov gcov] Don't require NUL terminator when reading files
Fangrui Song [Sun, 19 Jul 2020 07:26:01 +0000 (00:26 -0700)]
[llvm-cov gcov] Don't require NUL terminator when reading files

.gcno, .gcda and source files can be modified while we are reading them. If the
concurrent modification of a file being read nullifies the NUL terminator
assumption, llvm-cov can trip over an assertion failure in MemoryBuffer::init.
This is not so rare - the source files can be in an editor and .gcda can be
written by an running process (if the process forks, when .gcda gets written is
probably more unpredictable).

There is no accompanying test because an assertion failure requires data
races with some involved setting.

4 years ago[PowerPC] Remove the redundant implicit operands in ppc-early-ret pass
Kang Zhang [Sun, 19 Jul 2020 07:01:45 +0000 (07:01 +0000)]
[PowerPC] Remove the redundant implicit operands in ppc-early-ret pass

Summary:
In the `ppc-early-ret` pass, we have use `BuildMI` and `copyImplicitOps` when the branch instructions can do the early return. But the two functions will add implicit operands twice, this is not correct.

This patch is to remove the redundant implicit operands in `ppc-early-ret pass`.

Reviewed By: jsji

Differential Revision: https://reviews.llvm.org/D76042

4 years ago[NewPM] Allow passes to never be skipped
Yuanfang Chen [Sun, 19 Jul 2020 05:23:07 +0000 (22:23 -0700)]
[NewPM] Allow passes to never be skipped

A pass declares itself unskippable by defining a method `static bool isRequired()`.

Also, this patch makes pass managers and adaptor passes required (unskippable).

PassInstrumentation before-pass-callbacks could be used to skip passes by returning false.
However, some passes should not be skipped at all. Especially so for special-purpose passes such as pass managers and adaptor passes since if they are skipped for any reason, the passes contained by them would also be skipped ignoring contained passes's return value of `isRequired()`.

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D82344

4 years ago[NewPM] make parsePassPipeline parse adaptor-wrapped user passes
Yuanfang Chen [Sun, 19 Jul 2020 05:26:37 +0000 (22:26 -0700)]
[NewPM] make parsePassPipeline parse adaptor-wrapped user passes

Currently, when parsing text pipeline, different kinds of passes always
introduce nested pass managers. This makes it impossible to test the
adaptor-wrapped user passes from the text pipeline interface which is needed
by D82344 test cases. This also seems useful in general. See comments above
`parsePassPipeline`.

The syntax would be like mixing passes of different types, but it is
not the same as inferring the correct pass type and then adding the
matching nested pass managers. Strictly speaking, the resulted pipelines
are different.

Reviewed By: asbirlea, aeubanks

Differential Revision: https://reviews.llvm.org/D82698

4 years ago[Driver] --print-search-dirs: print -B options and COMPILER_PATH
Fangrui Song [Sun, 19 Jul 2020 04:01:41 +0000 (21:01 -0700)]
[Driver] --print-search-dirs: print -B options and COMPILER_PATH

4 years ago[Driver] -B: don't search for target triple prefixes
Fangrui Song [Sun, 19 Jul 2020 03:26:01 +0000 (20:26 -0700)]
[Driver] -B: don't search for target triple prefixes

To match GCC (either crossing or not), which doesn't prepend target triple prefixes to `exec_prefixes`.

As an example, powerpc64le-linux-gnu-gcc does not search "powerpc64le-linux-gnu-${name}" in a -B path.

4 years agoFix invalid link in the MLIR Standard Dialect www page (2nd attempt)
Mehdi Amini [Sat, 18 Jul 2020 22:21:29 +0000 (22:21 +0000)]
Fix invalid link in the MLIR Standard Dialect www page (2nd attempt)

4 years ago[gcov] Add __gcov_dump/__gcov_reset and delete __gcov_flush
Fangrui Song [Sat, 18 Jul 2020 22:07:46 +0000 (15:07 -0700)]
[gcov] Add __gcov_dump/__gcov_reset and delete __gcov_flush

GCC r187297 (2012-05) introduced `__gcov_dump` and `__gcov_reset`.
  `__gcov_flush = __gcov_dump + __gcov_reset`

The resolution to https://gcc.gnu.org/PR93623 ("No need to dump gcdas when forking" target GCC 11.0) removed the unuseful and undocumented __gcov_flush.

Close PR38064.

Reviewed By: calixte, serge-sans-paille

Differential Revision: https://reviews.llvm.org/D83149

4 years ago[gcov][test] Simplify instrprof-dlopen-dlclose-gcov.test
Fangrui Song [Sun, 12 Jul 2020 00:17:21 +0000 (17:17 -0700)]
[gcov][test] Simplify instrprof-dlopen-dlclose-gcov.test

4 years ago[InstCombine] Add test for PR46680 (NFC)
Nikita Popov [Sat, 18 Jul 2020 21:36:42 +0000 (23:36 +0200)]
[InstCombine] Add test for PR46680 (NFC)

4 years ago[clang][NFC] Tests showing the problems with some uses of NamedDecl::getDeclName...
Bruno Ricci [Sat, 18 Jul 2020 19:44:06 +0000 (20:44 +0100)]
[clang][NFC] Tests showing the problems with some uses of NamedDecl::getDeclName in diagnostics, SemaOverload.cpp+SemaStmt.cpp part

4 years ago[clang][NFC] Tests showing the problems with some uses of NamedDecl::getDeclName...
Bruno Ricci [Sat, 18 Jul 2020 19:39:16 +0000 (20:39 +0100)]
[clang][NFC] Tests showing the problems with some uses of NamedDecl::getDeclName in diagnostics, SemaExpr.cpp part

4 years ago[clang] Provide a more specific diagnostic for a misplaced lambda capture-default.
Bruno Ricci [Sat, 18 Jul 2020 19:35:16 +0000 (20:35 +0100)]
[clang] Provide a more specific diagnostic for a misplaced lambda capture-default.

Currently a capture-default which is not the first element in the lambda-capture
is diagnosed with a generic expected variable name or 'this' in lambda capture
list, which is true but not very helpful.

If we don't have already parsed a capture-default then a lone "&" or "=" is
likely to be a misplaced capture-default, so diagnose it as such.

Differential Revision: https://reviews.llvm.org/D83681

Reviewed By: aaron.ballman

4 years ago[flang] Improve output from a STOP statement
peter klausler [Fri, 17 Jul 2020 18:17:39 +0000 (11:17 -0700)]
[flang] Improve output from a STOP statement

Add a missing newline to IEEE FP flag formatting, and
don't neglect to emit STOP when there's no code number.

Reviewed By: tskeith

Differential Revision: https://reviews.llvm.org/D84060

4 years ago[gcov][test] Call wait() to make gcov-fork.c reliable
Fangrui Song [Sat, 18 Jul 2020 18:10:18 +0000 (11:10 -0700)]
[gcov][test] Call wait() to make gcov-fork.c reliable

If the parent exit before the child, the line counts might be 1.

next:18'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          26:  1: 21: if (fork() == -1) return 1; // CHECK-NEXT: 1: [[#@LINE]]:
next:18'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          27:  1: 22: func2(); // CHECK-NEXT: 2: [[#@LINE]]:
next:18'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          28:  1: 23: return 0; // CHECK-NEXT: 2: [[#@LINE]]:
next:18'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

4 years ago[flang] Insert leading blanks in LOGICAL formatted output fields
peter klausler [Fri, 17 Jul 2020 18:14:28 +0000 (11:14 -0700)]
[flang] Insert leading blanks in LOGICAL formatted output fields

Summary: For Lw output editing, emit (w-1) blanks before the T or the F.

Reviewed By: sscalpone, PeteSteinfeld

Differential Revision: https://reviews.llvm.org/D84059

4 years ago[analyzer] scan-build: Fix silencing multiple core checkers.
Artem Dergachev [Sat, 18 Jul 2020 02:42:20 +0000 (19:42 -0700)]
[analyzer] scan-build: Fix silencing multiple core checkers.

It was only silencing one checker because -analyzer-config flags
can only carry one value at a time.

4 years ago[OpenMP] Add Additional Function Attribute Information to OMPKinds.def
Joseph Huber [Sat, 18 Jul 2020 16:00:08 +0000 (12:00 -0400)]
[OpenMP] Add Additional Function Attribute Information to OMPKinds.def

Summary:
This patch adds more function attribute information to the runtime function definitions in OMPKinds.def. The goal is to provide sufficient information about OpenMP runtime functions to perform more optimizations on OpenMP code.

Reviewers: jdoerfert

Subscribers: aaron.ballman cfe-commits yaxunl guansong sstefan1 llvm-commits

Tags: #OpenMP #clang #LLVM

Differential Revision: https://reviews.llvm.org/D81031

4 years ago[NFC][CVP] processSDiv(): pacify gcc compilers
Roman Lebedev [Sat, 18 Jul 2020 16:41:21 +0000 (19:41 +0300)]
[NFC][CVP] processSDiv(): pacify gcc compilers

4 years agoFix dead link on MLIR website
Mehdi Amini [Sat, 18 Jul 2020 16:22:31 +0000 (16:22 +0000)]
Fix dead link on MLIR website

4 years agoFix Markdown format for lists in the Standard Dialect documentation
Mehdi Amini [Sat, 18 Jul 2020 16:12:41 +0000 (16:12 +0000)]
Fix Markdown format for lists in the Standard Dialect documentation

This affects the rendering on the website.

4 years ago[ELF][test] Update test after DW_EH_PE_sdata4/DW_EH_PE_sdata8 change
Fangrui Song [Sat, 18 Jul 2020 16:07:40 +0000 (09:07 -0700)]
[ELF][test] Update test after DW_EH_PE_sdata4/DW_EH_PE_sdata8 change

4 years ago[clang-format] Make sure rst documentation matches comments
Anders Waldenborg [Sat, 18 Jul 2020 15:26:06 +0000 (17:26 +0200)]
[clang-format] Make sure rst documentation matches comments

clang/docs/tools/dump_format_style.py is used to read the comments
from clang/include/clang/Format/Format.h and update the contents of
clang/docs/ClangFormatStyleOptions.rst

Recent changes made these out of date. This commit syncs them by
folding the improved wording back to the comments and then
regenerating the rst file.

Differential Revision: https://reviews.llvm.org/D84103

4 years ago[DebugInfo] Respect relocations when decoding DW_EH_PE_sdata4 & DW_EH_PE_sdata8 and...
Fangrui Song [Sat, 18 Jul 2020 15:59:05 +0000 (08:59 -0700)]
[DebugInfo] Respect relocations when decoding DW_EH_PE_sdata4 & DW_EH_PE_sdata8 and support R_ARM_REL32

The addresses in llvm-dwarfdump --eh-frame output for object files are closer to readelf -wf output now.

4 years ago[PredicateInfo] Fold PredicateWithCondition into PredicateBase (NFC).
Florian Hahn [Sat, 18 Jul 2020 14:59:51 +0000 (15:59 +0100)]
[PredicateInfo] Fold PredicateWithCondition into PredicateBase (NFC).

Each concrete instance of a predicate has a condition (also noted in the
original PredicateBase comment) and to me it seems like there is no
clear benefit of having both PredicateBase and PredicateWithCondition
and they can be folded together.

Reviewers: nikic, efriedma

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D84089

4 years ago[CVP] Soften SDiv into a UDiv as long as we know domains of both of the operands.
Roman Lebedev [Sat, 18 Jul 2020 10:23:26 +0000 (13:23 +0300)]
[CVP] Soften SDiv into a UDiv as long as we know domains of both of the operands.

Yes, if operands are non-positive this comes at the extra cost
of two extra negations. But  a. division is already just
ridiculously costly, two more subtractions can't hurt much :)
and  b. we have better/more analyzes/folds for an unsigned division,
we could end up narrowing it's bitwidth, converting it to lshr, etc.

This is essentially a take two on 0fdcca07ad2c0bdc2cdd40ba638109926f4f513b,
which didn't fix the potential regression i was seeing,
because ValueTracking's computeKnownBits() doesn't make use
of dominating conditions in it's analysis.
While i could teach it that, this seems like the more general fix.

This big hammer actually does catch said potential regression.

Over vanilla test-suite + RawSpeed + darktable
(10M IR instrs, 1M IR BB, 1M X86 ASM instrs), this fires/converts 5 more
(+2%) SDiv's, the total instruction count at the end of middle-end pipeline
is only +6, so out of +10 extra negations, ~half are folded away,
and asm instr count is only +1, so practically speaking all extra
negations are folded away and are therefore free.
Sadly, all these new UDiv's remained, none folded away.
But there are two less basic blocks.

https://rise4fun.com/Alive/VS6

Name: v0
Pre: C0 >= 0 && C1 >= 0
%r = sdiv i8 C0, C1
  =>
%r = udiv i8 C0, C1

Name: v1
Pre: C0 <= 0 && C1 >= 0
%r = sdiv i8 C0, C1
  =>
%t0 = udiv i8 -C0, C1
%r = sub i8 0, %t0

Name: v2
Pre: C0 >= 0 && C1 <= 0
%r = sdiv i8 C0, C1
  =>
%t0 = udiv i8 C0, -C1
%r = sub i8 0, %t0

Name: v3
Pre: C0 <= 0 && C1 <= 0
%r = sdiv i8 C0, C1
  =>
%r = udiv i8 -C0, -C1

4 years ago[NFC][CVP] Rename predicates - s/positive/non negative/ to better note that zero...
Roman Lebedev [Sat, 18 Jul 2020 10:13:01 +0000 (13:13 +0300)]
[NFC][CVP] Rename predicates - s/positive/non negative/ to better note that zero is ok

4 years ago[NFC][CVP] Refactor isPositive() out of hasPositiveOperands()
Roman Lebedev [Sat, 18 Jul 2020 10:07:13 +0000 (13:07 +0300)]
[NFC][CVP] Refactor isPositive() out of hasPositiveOperands()

4 years ago[NFC][CVP] Add tests for possible sdiv->udiv where operands are not non-negative
Roman Lebedev [Sat, 18 Jul 2020 14:30:42 +0000 (17:30 +0300)]
[NFC][CVP] Add tests for possible sdiv->udiv where operands are not non-negative

Currently that fold requires both operands to be non-negative,
but the only real requirement for the fold is that we must know
the domains of the operands.

4 years agoAMDGPU/GlobalISel: Address some test fixmes that don't fail now
Matt Arsenault [Sat, 18 Jul 2020 14:35:40 +0000 (10:35 -0400)]
AMDGPU/GlobalISel: Address some test fixmes that don't fail now

4 years agoAMDGPU/GlobalISel: Fix test copy paste error
Matt Arsenault [Sat, 18 Jul 2020 14:08:17 +0000 (10:08 -0400)]
AMDGPU/GlobalISel: Fix test copy paste error

4 years ago[LV] Add additional InLoop redution tests. NFC
David Green [Fri, 17 Jul 2020 07:35:04 +0000 (08:35 +0100)]
[LV] Add additional InLoop redution tests. NFC

4 years ago[CodeGen][TargetPassConfig] Add TargetTransformInfo pass correctly
Evgeny Leviant [Sat, 18 Jul 2020 11:11:40 +0000 (14:11 +0300)]
[CodeGen][TargetPassConfig] Add TargetTransformInfo pass correctly

Patch adds tti pass directly enforcing its execution with correctly set
TargetTransformInfo.

Differential revision: https://reviews.llvm.org/D84047

4 years ago[sanitizer] Disable test on incompatible platforms
Vitaly Buka [Sat, 18 Jul 2020 09:16:17 +0000 (02:16 -0700)]
[sanitizer] Disable test on incompatible platforms

4 years ago[MLIR] Add lowering for affine.parallel to scf.parallel
Yash Jain [Sat, 18 Jul 2020 07:39:30 +0000 (13:09 +0530)]
[MLIR] Add lowering for affine.parallel to scf.parallel

Add lowering conversion from affine.parallel to scf.parallel.

Differential Revision: https://reviews.llvm.org/D83239

4 years ago[RelocationResolver] Support R_AARCH64_PREL32
Fangrui Song [Sat, 18 Jul 2020 06:49:15 +0000 (23:49 -0700)]
[RelocationResolver] Support R_AARCH64_PREL32

Code from D83800 by Yichao Yu

4 years ago[RelocationResolver] Support R_PPC_REL32 & R_PPC64_REL{32,64}
Fangrui Song [Sat, 18 Jul 2020 06:29:50 +0000 (23:29 -0700)]
[RelocationResolver] Support R_PPC_REL32 & R_PPC64_REL{32,64}

This suppresses `failed to compute relocation: R_PPC_REL32, Invalid data was encountered while parsing the file`
and its 64-bit variants when running llvm-dwarfdump on a PowerPC object file with .eh_frame

Unfortunately it is difficult to test the computation:
DWARFDataExtractor::getEncodedPointer does not use the relocated value
and even if it does, we need to teach llvm-dwarfdump --eh-frame to do
some linker job to report a reasonable address.

4 years ago[MSAN tests] Require android for sigandorset.cpp
Gui Andrade [Sat, 18 Jul 2020 03:49:17 +0000 (03:49 +0000)]
[MSAN tests] Require android for sigandorset.cpp

4 years agoRevert "update libatomic instrumentation"
Gui Andrade [Sat, 18 Jul 2020 03:53:00 +0000 (03:53 +0000)]
Revert "update libatomic instrumentation"

This was committed mistakenly.

This reverts commit 1f29171ae77f81cacea32808b67d7ae62da23e0c.

4 years agoupdate libatomic instrumentation
Gui Andrade [Sat, 18 Jul 2020 03:39:14 +0000 (03:39 +0000)]
update libatomic instrumentation

4 years ago[LLVM] Add libatomic load/store functions to TargetLibraryInfo
Gui Andrade [Sat, 18 Jul 2020 03:18:48 +0000 (03:18 +0000)]
[LLVM] Add libatomic load/store functions to TargetLibraryInfo

This allows treating these functions like libcalls.
This patch is a prerequisite to instrumenting them in MSAN: https://reviews.llvm.org/D83337

Differential Revision: https://reviews.llvm.org/D83361

4 years agosanitizers: Implement sig{and,or}set interceptors
Gui Andrade [Sat, 18 Jul 2020 03:09:39 +0000 (03:09 +0000)]
sanitizers: Implement sig{and,or}set interceptors

Also adds a sanitizers-wide test, and a msan test, for these functions.

4 years ago[PowerPC]add testcase for adding store (load float*) pattern, nfc
Chen Zheng [Sat, 18 Jul 2020 02:51:00 +0000 (22:51 -0400)]
[PowerPC]add testcase for adding store (load float*) pattern, nfc

4 years ago[SCEV][IndVarSimplify] insert point should not be block front.
Chen Zheng [Wed, 15 Jul 2020 08:03:35 +0000 (04:03 -0400)]
[SCEV][IndVarSimplify] insert point should not be block front.

Recommit after removing the unused cast instructions.

Differential Revision:  https://reviews.llvm.org/D80975

4 years ago[OpenMP] Fix map clause for unused var: don't ignore it
Joel E. Denny [Sat, 18 Jul 2020 01:35:21 +0000 (21:35 -0400)]
[OpenMP] Fix map clause for unused var: don't ignore it

For example, without this patch:

```
 $ cat test.c
 int main() {
   int x[3];
   #pragma omp target map(tofrom:x[0:3])
 #ifdef USE
   x[0] = 1
 #endif
   ;
   return 0;
 }
 $ clang -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda -S -emit-llvm test.c
 $ grep '^@.offload_maptypes' test.ll
 $ echo $?
 1
 $ clang -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda -S -emit-llvm test.c \
         -DUSE
 $ grep '^@.offload_maptypes' test.ll
 @.offload_maptypes = private unnamed_addr constant [1 x i64] [i64 35]
```

With this patch, both greps produce the same result.

Reviewed By: ABataev

Differential Revision: https://reviews.llvm.org/D83922

4 years agoCorrected __libfuzzer_is_present symbol inclusion for MSVC x86 32-bit
Vitaly Buka [Sat, 18 Jul 2020 01:29:47 +0000 (18:29 -0700)]
Corrected __libfuzzer_is_present symbol inclusion for MSVC x86 32-bit

The incorrect symbol will cause linking failures for 32-bit targets:

clang_rt.fuzzer-i386.lib(FuzzerDriver.obj) : error LNK2001: unresolved external symbol __libfuzzer_is_present

Verified no longer fails to link with this change for 32-bit and still succeeds for 64-bit MSVC.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D83594

4 years ago[NewPM][ASan] Make ASan tests work under NPM
Arthur Eubanks [Sat, 18 Jul 2020 00:49:46 +0000 (17:49 -0700)]
[NewPM][ASan] Make ASan tests work under NPM

Under NPM, the asan-globals-md analysis is required but cannot be run
within the asan function pass due to module analyses not being able to
run from a function pass. So this pins all tests using "-asan" to the
legacy PM and adds a corresponding RUN line with
-passes='require<asan-globals-md>,function(asan)'.

Now all tests in Instrumentation/AddressSanitizer pass when
-enable-new-pm is by default on.

Tests were automatically converted using the following python script and
failures were manually fixed up.

import sys
for i in sys.argv:
    with open(i, 'r') as f:
        s = f.read()
    with open(i, 'w') as f:
        for l in s.splitlines():
            if "RUN:" in l and ' -asan -asan-module ' in l and '\\' not in l:
                f.write(l.replace(' -asan -asan-module ', ' -asan -asan-module -enable-new-pm=0 '))
                f.write('\n')
                f.write(l.replace(' -asan -asan-module ', " -passes='require<asan-globals-md>,function(asan),module(asan-module)' "))
                f.write('\n')
            elif "RUN:" in l and ' -asan ' in l and '\\' not in l:
                f.write(l.replace(' -asan ', ' -asan -enable-new-pm=0 '))
                f.write('\n')
                f.write(l.replace(' -asan ', " -passes='require<asan-globals-md>,function(asan)' "))
                f.write('\n')
            else:
                f.write(l)
                f.write('\n')

See https://bugs.llvm.org/show_bug.cgi?id=46611.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D83921

4 years ago[llvm-jitlink] Add suppport for testing GOT entries and stubs for ELF.
Lang Hames [Fri, 17 Jul 2020 21:56:51 +0000 (14:56 -0700)]
[llvm-jitlink] Add suppport for testing GOT entries and stubs for ELF.

This enables regression testing of GOT and stub handling with
llvm-jitlink.

4 years ago[asan] Use dynamic shadow memory position on Apple Silicon macOS
Kuba Mracek [Sat, 18 Jul 2020 00:39:43 +0000 (17:39 -0700)]
[asan] Use dynamic shadow memory position on Apple Silicon macOS

This is needed because macOS on Apple Silicon has some reserved pages inside the "regular" shadow memory location, and mapping over that location fails.

Differential Revision: https://reviews.llvm.org/D82912

4 years ago[clang][NFC] Add a missing 'override'
Logan Smith [Fri, 17 Jul 2020 03:39:45 +0000 (20:39 -0700)]
[clang][NFC] Add a missing 'override'

4 years ago[llvm][NFC] Add missing 'override's
Logan Smith [Fri, 17 Jul 2020 03:38:41 +0000 (20:38 -0700)]
[llvm][NFC] Add missing 'override's

4 years ago[llvm][NFC] Add missing 'override's in unittests/
Logan Smith [Fri, 17 Jul 2020 03:36:46 +0000 (20:36 -0700)]
[llvm][NFC] Add missing 'override's in unittests/

4 years ago[sanitizer] Another attempt to fix protoent test
Vitaly Buka [Sat, 18 Jul 2020 00:29:20 +0000 (17:29 -0700)]
[sanitizer] Another attempt to fix protoent test

Now we are going to pick name and index based on output of getprotoent_r.

4 years ago[flang] Prevent bogus runtime I/O error message
peter klausler [Sat, 18 Jul 2020 00:02:47 +0000 (17:02 -0700)]
[flang] Prevent bogus runtime I/O error message

The runtime was requiring that STATUS='OLD' be explicitly specified
on an OPEN statement for a connected unit.  There error should issue
only if a STATUS= other than 'OLD' is specified; an OPEN with no
STATUS= specifier is okay.

Reviewed By: sscalpone

Differential Revision: https://reviews.llvm.org/D84079

4 years ago[flang] Treat tabs like spaces in formatted input.
peter klausler [Fri, 17 Jul 2020 23:40:49 +0000 (16:40 -0700)]
[flang] Treat tabs like spaces in formatted input.

Reviewed By: sscalpone

Differential Revision: https://reviews.llvm.org/D84078

4 years ago[flang] Support <name>=<integer> syntax in compiler directives
peter klausler [Fri, 17 Jul 2020 23:36:59 +0000 (16:36 -0700)]
[flang] Support <name>=<integer> syntax in compiler directives

Accept name=value as part of a !DIR$ compiler directive.  These
are currently ignored in semantics, but we should recognize
more directive forms to facilitate testing.  In due course,
these placeholding directive parsers will be replaced.

Reviewed By: sscalpone

Differential Revision: https://reviews.llvm.org/D84077

4 years agoRevert "[PGO][PGSO] Add profile guided size optimization to loop vectorization legality."
Arthur Eubanks [Fri, 17 Jul 2020 23:47:41 +0000 (16:47 -0700)]
Revert "[PGO][PGSO] Add profile guided size optimization to loop vectorization legality."

This reverts commit 30c382a7c6607a7d898730f8d288768110cdf1d2.

See https://crbug.com/1106813.

4 years ago[CMake] Make `intrinsics_gen` dependency unconditional.
Michele Scandale [Fri, 17 Jul 2020 23:43:05 +0000 (16:43 -0700)]
[CMake] Make `intrinsics_gen` dependency unconditional.

The `intrinsics_gen` target exists in the CMake exports since r309389
(see LLVMConfig.cmake.in), hence projects can depend on `intrinsics_gen`
even it they are built separately from LLVM.

Reviewed By: MaskRay, JDevlieghere

Differential Revision: https://reviews.llvm.org/D83454

4 years ago[GISel: Add support for CSEing SrcOps which are immediates
Aditya Nandakumar [Fri, 17 Jul 2020 23:03:20 +0000 (16:03 -0700)]
[GISel: Add support for CSEing SrcOps which are immediates

https://reviews.llvm.org/D84072

Add G_EXTRACT to CSEConfigFull and add unit test as well.

4 years agoRevert "[AddressSanitizer] Don't use weak linkage for __{start,stop}_asan_globals"
Leonard Chan [Fri, 17 Jul 2020 22:29:50 +0000 (15:29 -0700)]
Revert "[AddressSanitizer] Don't use weak linkage for __{start,stop}_asan_globals"

This reverts commit d76e62fdb7a93d9a33f642b6b528f2562cc3c3f4.

Reverting since this can lead to linker errors:

```
ld.lld: error: undefined hidden symbol: __start_asan_globals
```

when using --gc-sections. The linker can discard __start_asan_globals
once there are no more `asan_globals` sections left, which can lead to
this error if we have external linkages to them.

4 years ago[flang] Allow ! and // comments after some preprocessing directives
peter klausler [Fri, 17 Jul 2020 18:21:08 +0000 (11:21 -0700)]
[flang] Allow ! and // comments after some preprocessing directives

Old-style C /*comments*/ are omitted from preprocessor directive
token sequences by the prescanner, but line-ending C++ and Fortran
free-form comments are not since their handling might depend on
the directive.  Add code to skip these line-ending comments as
appropriate in place of existing code that just skipped blanks.

Reviewed By: sscalpone

Differential Revision: https://reviews.llvm.org/D84061

4 years ago[OpenMP] libomp cleanup: check presence of hwloc objects CORE, PACKAGE
AndreyChurbanov [Fri, 17 Jul 2020 22:15:37 +0000 (01:15 +0300)]
[OpenMP] libomp cleanup: check presence of hwloc objects CORE, PACKAGE

hwloc documentation guarantees the only object that is always present
in the topology is PU. We can check the presence of other objects
in the topology, just in case.

Differential Revision: https://reviews.llvm.org/D84065

4 years ago[clangd] Fix the build with clang <3.9.
Michael Spencer [Fri, 17 Jul 2020 22:12:18 +0000 (16:12 -0600)]
[clangd] Fix the build with clang <3.9.

In clang <3.9 the `unique_ptr` constructor that is supposed to allow
for Derived to Base conversion does not work. Remove this if we drop
support for such configurations.

This is the same fix as in fda901a987ddd, and it updates the comments
to better reflect the actual issue. The same thing reproduces with
libc++ with older clangs.

4 years agoTemporarily Revert "[OpenMP] Add Additional Function Attribute Information to OMPKind...
Eric Christopher [Fri, 17 Jul 2020 22:05:42 +0000 (15:05 -0700)]
Temporarily Revert "[OpenMP] Add Additional Function Attribute Information to OMPKinds.def"
as it's causing a few unused variable warnings via the macro instantiation:

sources/llvm-project/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def:649:17: error: unused variable 'InaccessibleOnlyAttrs' [-Werror,-Wunused-variable]
__OMP_ATTRS_SET(InaccessibleOnlyAttrs,
                ^

This reverts commit 09fe0c5ab9ca5846d6cb625e9be47fdcfe49b93c.

4 years agoTemporarily Revert "[InlineAdvisor] New inliner advisor to replay inlining from optim...
Eric Christopher [Fri, 17 Jul 2020 21:58:01 +0000 (14:58 -0700)]
Temporarily Revert "[InlineAdvisor] New inliner advisor to replay inlining from optimization remarks"
as it is failing the inline-replay.ll test as well as sanitizers/Werror
from returning a stack local variable.

This reverts commit 029946b112684c27b27f7c2d7554f22b33ae1e0b.

4 years ago[OpenMP] Add Additional Function Attribute Information to OMPKinds.def
Joseph Huber [Fri, 17 Jul 2020 21:54:01 +0000 (17:54 -0400)]
[OpenMP] Add Additional Function Attribute Information to OMPKinds.def

Summary:
This patch adds more function attribute information to the runtime function definitions in OMPKinds.def. The goal is to provide sufficient information about OpenMP runtime functions to perform more optimizations on OpenMP code.

Reviewers: jdoerfert

Subscribers: aaron.ballman cfe-commits yaxunl guansong sstefan1 llvm-commits

Tags: #OpenMP #clang #llvm

Differential Revision: https://reviews.llvm.org/D81031

4 years ago[compiler-rt][asan][hwasan] Fix Fuchsia build
Teresa Johnson [Fri, 17 Jul 2020 21:48:28 +0000 (14:48 -0700)]
[compiler-rt][asan][hwasan] Fix Fuchsia build

Fix build failure in Fuchsia build from refactoring in
5d2be1a18845c528d3e86f7efcc59872e4a757c3

Guard the moved versions of ReserveShadowMemoryRange and ProtectGap
the same way they were in the asan code originally (not for Fuchsia or
RTEMS). Otherwise we end up with unsats as they invoke functions not
defined there.

4 years ago[flang] Rework read/write permission management for runtime file opening
peter klausler [Fri, 17 Jul 2020 18:24:29 +0000 (11:24 -0700)]
[flang] Rework read/write permission management for runtime file opening

Anonymous Fortran unit files (e.g., "./fort.7") need to be created
O_RDWR so that they can be written, rewound, and read.  Other
files opened with no ACTION= specifier need to set read/write
permissions based on the file, if it exists.

Reviewed By: sscalpone

Differential Revision: https://reviews.llvm.org/D84063

4 years agoRemove clang matrix lowering test for now as it is still failing under the NPM.
Sjoerd Meijer [Fri, 17 Jul 2020 21:40:41 +0000 (22:40 +0100)]
Remove clang matrix lowering test for now as it is still failing under the NPM.

4 years ago[InlineAdvisor] New inliner advisor to replay inlining from optimization remarks
Wenlei He [Tue, 14 Jul 2020 05:12:28 +0000 (22:12 -0700)]
[InlineAdvisor] New inliner advisor to replay inlining from optimization remarks

Summary:
This change added a new inline advisor that takes optimization remarks for previous inlining as input, and provide the decision as advice so current inlining can replay inline decision of a different compilation. Dwarf inline stack with line and discriminator is used as anchor for call sites. The change can be useful for Inliner tuning.
A switch -sample-profile-inline-replay=<inline_remarks_file> is added to hook up the new inliner advisor with SampleProfileLoader's inline decision for replay. The new inline advisor can also be used by regular CGSCC inliner later if needed.

Reviewers: davidxl, mtrofin, wmi, hoy

Subscribers: aprantl, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D83743

4 years ago[AIX] report_fatal_error on `-fregister_global_dtors_with_atexit` for static init
Xiangling Liao [Thu, 16 Jul 2020 18:29:13 +0000 (14:29 -0400)]
[AIX] report_fatal_error on `-fregister_global_dtors_with_atexit` for static init

On AIX, the semantic of global_dtors contains __sterm functions associated with C++
cleanup actions and user-declared __attribute__((destructor)) functions. We should
never merely register __sterm with atexit(), so currently
-fregister_global_dtors_with_atexit does not work well on AIX: It would cause
finalization actions to not occur when unloading shared libraries.  We need to figure
out a way to handle that when we start supporting user-declared
__attribute__((destructor)) functions.

Currently we report_fatal_error on this option temporarily.

Differential Revision: https://reviews.llvm.org/D83974