platform/upstream/llvm.git
6 years agoAvoid comparison between signed and unsigned in SCEVExitLimitForget tests
Max Kazantsev [Fri, 4 Aug 2017 06:03:51 +0000 (06:03 +0000)]
Avoid comparison between signed and unsigned in SCEVExitLimitForget tests

llvm-svn: 310029

6 years ago[AVR] Update target machine to use new constructor parameters
Dylan McKay [Fri, 4 Aug 2017 05:48:20 +0000 (05:48 +0000)]
[AVR] Update target machine to use new constructor parameters

The required parameters were changed in r309911.

llvm-svn: 310028

6 years ago[IRCE] Recognize loops with unsigned latch conditions
Max Kazantsev [Fri, 4 Aug 2017 05:40:20 +0000 (05:40 +0000)]
[IRCE] Recognize loops with unsigned latch conditions

This patch enables recognition of loops with ult/ugt latch conditions.

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

llvm-svn: 310027

6 years agoRevert "[llvm][llvm-objcopy] Added support for outputting to binary in llvm-objcopy"
Petr Hosek [Fri, 4 Aug 2017 05:33:44 +0000 (05:33 +0000)]
Revert "[llvm][llvm-objcopy] Added support for outputting to binary in llvm-objcopy"

This breaks the build on clang-s390x-linux.

This reverts commit r310018.

llvm-svn: 310026

7 years ago[InstCombine] Move the call to foldSelectICmpAnd into foldSelectInstWithICmp. NFCI
Craig Topper [Fri, 4 Aug 2017 05:12:37 +0000 (05:12 +0000)]
[InstCombine] Move the call to foldSelectICmpAnd into foldSelectInstWithICmp. NFCI

llvm-svn: 310025

7 years ago[InstCombine] Remove unnecessary casts. NFC
Craig Topper [Fri, 4 Aug 2017 05:12:35 +0000 (05:12 +0000)]
[InstCombine] Remove unnecessary casts. NFC

We're calling an overload of getOpcode that already returns Instruction::CastOps.

llvm-svn: 310024

7 years agoFix SCEVExitLimitForget tests to make Sanitizer happy
Max Kazantsev [Fri, 4 Aug 2017 05:06:44 +0000 (05:06 +0000)]
Fix SCEVExitLimitForget tests to make Sanitizer happy

llvm-svn: 310023

7 years agoPrevent unused warning in non-assert builds (introduced in r310014).
Daniel Jasper [Fri, 4 Aug 2017 05:05:29 +0000 (05:05 +0000)]
Prevent unused warning in non-assert builds (introduced in r310014).

llvm-svn: 310022

7 years agoUn-revert r310014: false revert, it wasn't the cause of build break
Victor Leschuk [Fri, 4 Aug 2017 04:51:15 +0000 (04:51 +0000)]
Un-revert r310014: false revert, it wasn't the cause of build break

llvm-svn: 310021

7 years agoRevert r310014 as it breaks build lld-x86_64-darwin13
Victor Leschuk [Fri, 4 Aug 2017 04:43:54 +0000 (04:43 +0000)]
Revert r310014 as it breaks build lld-x86_64-darwin13

llvm-svn: 310020

7 years agoRevert "[coverage] Special-case calls to noreturn functions."
Vedant Kumar [Fri, 4 Aug 2017 04:08:23 +0000 (04:08 +0000)]
Revert "[coverage] Special-case calls to noreturn functions."

This reverts commit r309995. It looks like it's responsible for breaking
the stage2 coverage build:

http://green.lab.llvm.org/green/job/clang-stage2-coverage-R_build/1402

The cfe-commits discussion re: r309995 has more context.

llvm-svn: 310019

7 years agoReland "[llvm][llvm-objcopy] Added support for outputting to binary in llvm-objcopy"
Petr Hosek [Fri, 4 Aug 2017 03:17:37 +0000 (03:17 +0000)]
Reland "[llvm][llvm-objcopy] Added support for outputting to binary in llvm-objcopy"

This change adds the "-O binary" flag which directs llvm-objcopy to
output the object file to the same format as GNU objcopy does when given
the flag "-O binary". This was done by splitting the Object class into
two subclasses ObjectELF and ObjectBianry which each output a different
format but relay on the same code to read in the Object in Object.

Patch by Jake Ehrlich

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

llvm-svn: 310018

7 years ago[Driver][Fuchsia] Pass --hash-style=gnu to the linker
Petr Hosek [Fri, 4 Aug 2017 02:39:27 +0000 (02:39 +0000)]
[Driver][Fuchsia] Pass --hash-style=gnu to the linker

The .gnu_hash format is superior, and all versions of the Fuchsia
dynamic linker support it.

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

llvm-svn: 310017

7 years ago[Support] Update comments about stdout, raw_fd_ostream, and outs()
Reid Kleckner [Fri, 4 Aug 2017 01:39:23 +0000 (01:39 +0000)]
[Support] Update comments about stdout, raw_fd_ostream, and outs()

The full story is in the comments:

  // Do not attempt to close stdout or stderr. We used to try to maintain the
  // property that tools that support writing file to stdout should not also
  // write informational output to stdout, but in practice we were never able to
  // maintain this invariant. Many features have been added to LLVM and clang
  // (-fdump-record-layouts, optimization remarks, etc) that print to stdout, so
  // users must simply be aware that mixed output and remarks is a possibility.

NFC, I am just updating comments to reflect reality.

llvm-svn: 310016

7 years agocoverage: Update tests to reflect changes from r310012
Vedant Kumar [Fri, 4 Aug 2017 01:22:19 +0000 (01:22 +0000)]
coverage: Update tests to reflect changes from r310012

llvm-svn: 310015

7 years agoTeach GlobalSRA to update the debug info for split-up globals.
Adrian Prantl [Fri, 4 Aug 2017 01:19:54 +0000 (01:19 +0000)]
Teach GlobalSRA to update the debug info for split-up globals.

This is similar to what we are doing in "regular" SROA and creates
DW_OP_LLVM_fragment operations to describe the resulting variables.

rdar://problem/33654891

llvm-svn: 310014

7 years ago[AMDGPU] Add missing hazard for DPP-after-EXEC-write
Connor Abbott [Fri, 4 Aug 2017 01:09:43 +0000 (01:09 +0000)]
[AMDGPU] Add missing hazard for DPP-after-EXEC-write

Summary:
Following the docs, we need at least 5 wait states between an EXEC write
and an instruction that uses DPP.

Reviewers: tstellar, arsenm

Subscribers: kzhuravl, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, llvm-commits

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

llvm-svn: 310013

7 years ago[llvm-cov] Ignore unclosed line segments when setting line counts
Vedant Kumar [Fri, 4 Aug 2017 00:36:24 +0000 (00:36 +0000)]
[llvm-cov] Ignore unclosed line segments when setting line counts

This patch makes a slight change to the way llvm-cov determines line
execution counts. If there are multiple line segments on a line, the
line count is the max count among the regions which start *and* end on
the line. This avoids an issue posed by deferred regions which start on
the same line as a terminated region, e.g:

  if (false)
    return; //< The line count should be 0, even though a new region
            //< starts at the semi-colon.
  foo();

Another change is that counts from line segments which don't correspond
to region entries are considered. This enables the first change, and
corrects an outstanding issue (see the showLineExecutionCounts.cpp test
change).

This is related to D35925.

Testing: check-profile, llvm-cov lit tests

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

llvm-svn: 310012

7 years ago[llvm-cov] NFC: make_unique-ify two allocations
Vedant Kumar [Fri, 4 Aug 2017 00:36:24 +0000 (00:36 +0000)]
[llvm-cov] NFC: make_unique-ify two allocations

llvm-svn: 310011

7 years ago[Coverage] Precise region termination with deferred regions
Vedant Kumar [Fri, 4 Aug 2017 00:29:20 +0000 (00:29 +0000)]
[Coverage] Precise region termination with deferred regions

The current coverage implementation doesn't handle region termination
very precisely. Take for example an `if' statement with a `return':

  void f() {
    if (true) {
      return; // The `if' body's region is terminated here.
    }
    // This line gets the same coverage as the `if' condition.
  }

If the function `f' is called, the line containing the comment will be
marked as having executed once, which is not correct.

The solution here is to create a deferred region after terminating a
region. The deferred region is completed once the start location of the
next statement is known, and is then pushed onto the region stack.
In the cases where it's not possible to complete a deferred region, it
can safely be dropped.

Testing: lit test updates, a stage2 coverage-enabled build of clang
llvm-svn: 310010

7 years agoDisable libFuzzer tests on Windows
George Karpenkov [Fri, 4 Aug 2017 00:26:12 +0000 (00:26 +0000)]
Disable libFuzzer tests on Windows

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

llvm-svn: 310009

7 years agoRevert "[TableGen] AsmMatcher: fix OpIdx computation when HasOptionalOperands is...
Vitaly Buka [Fri, 4 Aug 2017 00:25:24 +0000 (00:25 +0000)]
Revert "[TableGen] AsmMatcher: fix OpIdx computation when HasOptionalOperands is true"

Breaks check-llvm under ubsan.

This reverts commit r309949.

llvm-svn: 310008

7 years agoAMDGPU: Remove pointless asserts
Matt Arsenault [Fri, 4 Aug 2017 00:00:13 +0000 (00:00 +0000)]
AMDGPU: Remove pointless asserts

llvm-svn: 310007

7 years ago[Driver][Darwin] Pass -munwind-table when !UseSjLjExceptions.
Akira Hatanaka [Thu, 3 Aug 2017 23:55:42 +0000 (23:55 +0000)]
[Driver][Darwin] Pass -munwind-table when !UseSjLjExceptions.

This commit fixes a bug where clang/llvm doesn't emit an unwind table
for a function when it is marked noexcept. Without this patch, the
following code terminates with an uncaught exception on ARM64:

int foo1() noexcept {
  try {
    throw 0;
  } catch (int i) {
    return 0;
  }
  return 1;
}

int main() {
  return foo1();
}

rdar://problem/32411865

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

llvm-svn: 310006

7 years agoUse profile summary to disable peeling for huge working sets
Teresa Johnson [Thu, 3 Aug 2017 23:42:58 +0000 (23:42 +0000)]
Use profile summary to disable peeling for huge working sets

Summary:
Detect when the working set size of a profiled application is huge,
by comparing the number of counts required to reach the hot percentile
in the profile summary to a large threshold*.

When the working set size is determined to be huge, disable peeling
to avoid bloating the working set further.

*Note that the selected threshold (15K) is significantly larger than the
largest working set value in SPEC cpu2006 (which is gcc at around 11K).

Reviewers: davidxl

Subscribers: mehdi_amini, mzolotukhin, eraman, llvm-commits

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

llvm-svn: 310005

7 years agoAMDGPU: Don't use report_fatal_error for unsupported call types
Matt Arsenault [Thu, 3 Aug 2017 23:32:41 +0000 (23:32 +0000)]
AMDGPU: Don't use report_fatal_error for unsupported call types

llvm-svn: 310004

7 years agoAMDGPU: Remove error on calls for amdgcn
Matt Arsenault [Thu, 3 Aug 2017 23:24:05 +0000 (23:24 +0000)]
AMDGPU: Remove error on calls for amdgcn

Repurpose the -amdgpu-function-calls flag. Rather
than require it to emit a call, only use it to
run the always inline path or not.

llvm-svn: 310003

7 years agoAMDGPU: Fix implicitarg.ptr handling special inputs
Matt Arsenault [Thu, 3 Aug 2017 23:12:44 +0000 (23:12 +0000)]
AMDGPU: Fix implicitarg.ptr handling special inputs

llvm-svn: 310002

7 years agoSupport: WOA64 and WOA Signals
Martell Malone [Thu, 3 Aug 2017 23:12:33 +0000 (23:12 +0000)]
Support: WOA64 and WOA Signals

Reviewers: rnk

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

llvm-svn: 310001

7 years ago[llvm-pdbutil] Add an option to only dump specific module indices.
Zachary Turner [Thu, 3 Aug 2017 23:11:52 +0000 (23:11 +0000)]
[llvm-pdbutil] Add an option to only dump specific module indices.

Often something interesting (like a symbol) is in a particular
module, and you don't want to dump symbols from all other 300
modules to see the one you want.  This adds a -modi option so that
we only dump the specified module.

llvm-svn: 310000

7 years agoEnable AddressSanitizer for Fuchsia targets
Petr Hosek [Thu, 3 Aug 2017 23:02:22 +0000 (23:02 +0000)]
Enable AddressSanitizer for Fuchsia targets

Patch by Roland McGrath

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

llvm-svn: 309999

7 years agoAMDGPU: Pass special input registers to functions
Matt Arsenault [Thu, 3 Aug 2017 23:00:29 +0000 (23:00 +0000)]
AMDGPU: Pass special input registers to functions

llvm-svn: 309998

7 years agoFix typo.
Eric Christopher [Thu, 3 Aug 2017 22:41:12 +0000 (22:41 +0000)]
Fix typo.

llvm-svn: 309997

7 years agoAMDGPU: Add analysis pass for function argument info
Matt Arsenault [Thu, 3 Aug 2017 22:30:46 +0000 (22:30 +0000)]
AMDGPU: Add analysis pass for function argument info

This will allow only adding necessary inputs to callee functions
that need special inputs forwarded from the kernel.

llvm-svn: 309996

7 years ago[coverage] Special-case calls to noreturn functions.
Eli Friedman [Thu, 3 Aug 2017 22:27:36 +0000 (22:27 +0000)]
[coverage] Special-case calls to noreturn functions.

The code after a noreturn call doesn't execute.

The pattern in the testcase is pretty common in LLVM (a switch with
a default case that calls llvm_unreachable).

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

llvm-svn: 309995

7 years ago[Inliner] Increase threshold for hot callsites without PGO.
Easwaran Raman [Thu, 3 Aug 2017 22:23:33 +0000 (22:23 +0000)]
[Inliner] Increase threshold for hot callsites without PGO.

Summary:
This increases the inlining threshold for hot callsites. Hotness is
defined in terms of block frequency of the callsite relative to the
caller's entry block's frequency. Since this requires BFI in the
inliner, this only affects the new PM pipeline. This is enabled by
default at -O3.

This improves the performance of some internal benchmarks. Notably, an
internal benchmark for Gipfeli compression
(https://github.com/google/gipfeli) improves by ~7%. Povray in SPEC2006
improves by ~2.5%. I am running more experiments and will update the
thread if other benchmarks show improvement/regression.

In terms of text size, LLVM test-suite shows an 1.22% text size
increase. Diving into the results, 13 of the benchmarks in the
test-suite increases by > 10%. Most of these are small, but
Adobe-C++/loop_unroll (17.6% increases) and tramp3d(20.7% size increase)
have >250K text size. On a large application, the text size increases by
2%

Reviewers: chandlerc, davidxl

Subscribers: llvm-commits

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

llvm-svn: 309994

7 years ago[Mips] Fix some Clang-tidy modernize-use-using and Include What You Use warnings...
Eugene Zelenko [Thu, 3 Aug 2017 22:12:30 +0000 (22:12 +0000)]
[Mips] Fix some Clang-tidy modernize-use-using and Include What You Use warnings; other minor fixes (NFC).

llvm-svn: 309993

7 years ago[VirtualInstruction] Handle MetadataAsValue as constant.
Michael Kruse [Thu, 3 Aug 2017 22:00:01 +0000 (22:00 +0000)]
[VirtualInstruction] Handle MetadataAsValue as constant.

The complication of bspatch.cc of the AOSP buildbot currently fails
presumably because the occurance of a MetadataAsValue in an operand.
This kind of value can occur as operands of intrinsics, the typical
example being the debug intrinsics.

Polly currently ignores the debug intrinsics and it is not yet clear
which other intrinic might occur. For such cases, and to unbreak the
AOSP buildbot, treat a MetadataAsValue as a constant because it can be
referenced without modification in generated code.

llvm-svn: 309992

7 years agoDAG: Provide access to Pass instance from SelectionDAG
Matt Arsenault [Thu, 3 Aug 2017 21:54:00 +0000 (21:54 +0000)]
DAG: Provide access to Pass instance from SelectionDAG

This allows accessing an analysis pass during lowering.

llvm-svn: 309991

7 years ago[GlobalISel] Make GlobalISel a non-optional library.
Quentin Colombet [Thu, 3 Aug 2017 21:52:25 +0000 (21:52 +0000)]
[GlobalISel] Make GlobalISel a non-optional library.

With this change, the GlobalISel library gets always built. In
particular, this is not possible to opt GlobalISel out of the build
using the LLVM_BUILD_GLOBAL_ISEL variable any more.

llvm-svn: 309990

7 years ago[PDB] Loosen checks for section contribution sizes
Reid Kleckner [Thu, 3 Aug 2017 21:20:41 +0000 (21:20 +0000)]
[PDB] Loosen checks for section contribution sizes

The PDB debug data directory entry has an absolute path in it. This will
make it different on every machine.

llvm-svn: 309989

7 years ago[NewGVN] Fix the case where we have a phi-of-ops which goes away.
Davide Italiano [Thu, 3 Aug 2017 21:17:49 +0000 (21:17 +0000)]
[NewGVN] Fix the case where we have a phi-of-ops which goes away.

Patch by Daniel Berlin, fixes PR33196 (and probably something else).

llvm-svn: 309988

7 years ago[PDB] Fix section contributions
Reid Kleckner [Thu, 3 Aug 2017 21:15:09 +0000 (21:15 +0000)]
[PDB] Fix section contributions

Summary:
PDB section contributions are supposed to use output section indices and
offsets, not input section indices and offsets.

This allows the debugger to look up the index of the module that it
should look up in the modules stream for symbol information. With this
change, windbg can now find line tables, but it still cannot print local
variables.

Fixes PR34048

Reviewers: zturner

Subscribers: hiraditya, ruiu, llvm-commits

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

llvm-svn: 309987

7 years ago[LVI] Constant-propagate a zero extension of the switch condition value through case...
Hiroshi Yamauchi [Thu, 3 Aug 2017 21:11:30 +0000 (21:11 +0000)]
[LVI] Constant-propagate a zero extension of the switch condition value through case edges

Summary:
(This is a second attempt as https://reviews.llvm.org/D34822 was reverted.)

LazyValueInfo currently computes the constant value of the switch condition through case edges, which allows the constant value to be propagated through the case edges.

But we have seen a case where a zero-extended value of the switch condition is used past case edges for which the constant propagation doesn't occur.

This patch adds a small logic to handle such a case in getEdgeValueLocal().

This is motivated by the Python 2.7 eval loop in PyEval_EvalFrameEx() where the lack of the constant propagation causes longer live ranges and more spill code than necessary.

With this patch, we see that the code size of PyEval_EvalFrameEx() decreases by ~5.4% and a performance test improves by ~4.6%.

Reviewers: sanjoy

Reviewed By: sanjoy

Subscribers: llvm-commits

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

llvm-svn: 309986

7 years agoMove unit test to the proper location
Taewook Oh [Thu, 3 Aug 2017 21:07:12 +0000 (21:07 +0000)]
Move unit test to the proper location

Summary: Move test/CodeGen/AArch64/reg-bank-128bit.mir to test/CodeGen/AArch64/GlobalISel/reg-bank-128bit.mir so that the test is executed only when global-isel is enabled. lit.local.cfg under test/CodeGen/AArch64/GlobalISel checks if 'global-isel' is in the available_features while the same file under test/CodeGen/AArch64 doesn't.

Reviewers: qcolombet, davide

Reviewed By: davide

Subscribers: davide, aemerson, javed.absar, igorb, kristof.beyls, llvm-commits

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

llvm-svn: 309985

7 years agoUse "foo-12345.o" instead of "foo.o-12345" as temporary file name.
Nico Weber [Thu, 3 Aug 2017 21:06:36 +0000 (21:06 +0000)]
Use "foo-12345.o" instead of "foo.o-12345" as temporary file name.

This helps some tools that do things based on the output's extension.

For example, we got reports from users on Windows that have a tool that scan a
build output dir (but skip .obj files). The tool would keep the "foo.obj-12345"
file open, and then when clang tried to rename the temp file to the final
output filename, that would fail. By making the tempfile end in ".obj", tools
like this will now skip the temp files as well.

https://reviews.llvm.org/D36238

llvm-svn: 309984

7 years ago[llvm-pdbutil] Allow diff to force module equivalencies.
Zachary Turner [Thu, 3 Aug 2017 20:30:09 +0000 (20:30 +0000)]
[llvm-pdbutil] Allow diff to force module equivalencies.

Sometimes the normal module equivalence detection algorithm doesn't
quite work.  For example, you might build the same program with
MSVC and clang-cl, outputting to different object files, exes, and
PDBs, then compare them.  If the object files have different names
though, then they won't be treated as equivalent.  This way we
can force specific module indices to be treated as equivalent.

llvm-svn: 309983

7 years ago[libFuzzer] Un-reverting change in tests after fixing the failure on Linux.
George Karpenkov [Thu, 3 Aug 2017 20:28:16 +0000 (20:28 +0000)]
[libFuzzer] Un-reverting change in tests after fixing the failure on Linux.

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

llvm-svn: 309982

7 years agotest commit
Connor Abbott [Thu, 3 Aug 2017 20:22:30 +0000 (20:22 +0000)]
test commit

llvm-svn: 309981

7 years agoFix llvm-for-windows-on-linux build after LLVM r272701.
Nico Weber [Thu, 3 Aug 2017 20:10:47 +0000 (20:10 +0000)]
Fix llvm-for-windows-on-linux build after LLVM r272701.

The file is called "intrin.h". When building targeting Windows on a Linux
system, with the SDK mounted in a case-insensitive file system, "Intrin.h" will
miss clang's intrin.h header (because that's not in a case-insensitive file
system) but then find intrin.h in the Microsoft SDK. clang can't handle the
SDK's intrin.h.

https://reviews.llvm.org/D36281

llvm-svn: 309980

7 years ago[test] Fix clang library dir in LD_LIBRARY_PATH For stand-alone build
Michal Gorny [Thu, 3 Aug 2017 19:41:33 +0000 (19:41 +0000)]
[test] Fix clang library dir in LD_LIBRARY_PATH For stand-alone build

Prepend the clang library directory (determined using SHLIBDIR, alike
in clang) to the LD_LIBRARY_PATH to ensure that just-built clang
libraries will be used instead of a previous installed version.

When a stand-alone build is performed, LLVM_LIBS_DIR contains the path
to installed LLVM library directory. The same directory frequently
contains a previously installed version of clang. SHLIBDIR, on the other
hand, is always the build-tree directory, and therefore contains
the freshly built clang libraries.

In a non-stand-alone build, both paths will be the same and therefore
including them both will not cause any issues.

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

llvm-svn: 309979

7 years ago[mips] Revert r309942 & r309940
Simon Dardis [Thu, 3 Aug 2017 19:39:51 +0000 (19:39 +0000)]
[mips] Revert r309942 & r309940

This reverts commit r309942 & commit r309940.

A revert was requested following post commit review.

llvm-svn: 309978

7 years agoCut and paste error from r23162.
Jim Ingham [Thu, 3 Aug 2017 19:38:38 +0000 (19:38 +0000)]
Cut and paste error from r23162.

llvm-svn: 309977

7 years agoRevert accidentally-committed files.
Richard Smith [Thu, 3 Aug 2017 19:25:02 +0000 (19:25 +0000)]
Revert accidentally-committed files.

llvm-svn: 309976

7 years agoDon't emit undefined-internal warnings for CXXDeductionGuideDecls.
Richard Smith [Thu, 3 Aug 2017 19:24:27 +0000 (19:24 +0000)]
Don't emit undefined-internal warnings for CXXDeductionGuideDecls.

Patch by ~paul (cynecx on phabricator)! Some test massaging by me.

llvm-svn: 309975

7 years ago[builtins] Use Interlocked* intrinsics for atomics on MSVC
Martin Storsjo [Thu, 3 Aug 2017 19:04:28 +0000 (19:04 +0000)]
[builtins] Use Interlocked* intrinsics for atomics on MSVC

Tested on MSVC 2013, 2015 and 2017 targeting X86, X64 and ARM.

This fixes building emutls.c for Windows for ARM (both with clang
which don't need these atomics fallbacks at all, but just failed
due to the immintrin.h include before, and with MSVC).

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

llvm-svn: 309974

7 years agoThese tests use 80-bit long doubles, which are x86 only. Mark them so.
Sterling Augustine [Thu, 3 Aug 2017 18:56:54 +0000 (18:56 +0000)]
These tests use 80-bit long doubles, which are x86 only. Mark them so.

This avoids having each new target need to mark them as unsupported.

llvm-svn: 309973

7 years agoAdd an auto-continue flag to breakpoints & locations.
Jim Ingham [Thu, 3 Aug 2017 18:13:24 +0000 (18:13 +0000)]
Add an auto-continue flag to breakpoints & locations.

You can get a breakpoint to auto-continue by adding "continue"
as a command, but that has the disadvantage that if you hit two
breakpoints simultaneously, the continue will force the process
to continue, and maybe even forstalling the commands on the other.
The auto-continue flag means the breakpoints can negotiate about
whether to stop.

Writing tests, I wanted to supply some commands when I made the
breakpoints, so I also added that ability.

llvm-svn: 309969

7 years ago[Analyzer] Add support for displaying cross-file diagnostic paths in HTML output
Devin Coughlin [Thu, 3 Aug 2017 18:12:22 +0000 (18:12 +0000)]
[Analyzer] Add support for displaying cross-file diagnostic paths in HTML output

This change adds support for cross-file diagnostic paths in html output. If the
diagnostic path is not cross-file, there is no change in the output.

Patch by Vlad Tsyrklevich!

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

llvm-svn: 309968

7 years agoFix check-lit compatibility with multi-config CMake generators
Greg Bedwell [Thu, 3 Aug 2017 17:55:54 +0000 (17:55 +0000)]
Fix check-lit compatibility with multi-config CMake generators

Multi-configuration CMake generators such as those for Visual Studio or Xcode do not
specify a build config at configure time, but let the user choose at build
time.  In these cases binaries go into build/${Configuration}/bin rather than
build/bin.  Prior to this commit, check-lit would fail when using multi-configuration
generators as it did not know how to resolve ${Configuration} in order
to find tools such as FileCheck.  This commit teaches it to resolve
llvm_tools_dir within lit using the value specified with --param
build_mode.

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

llvm-svn: 309967

7 years agoDisable loop peeling during full unrolling pass.
Teresa Johnson [Thu, 3 Aug 2017 17:52:38 +0000 (17:52 +0000)]
Disable loop peeling during full unrolling pass.

Summary:
Peeling should not occur during the full unrolling invocation early
in the pipeline, but rather later with partial and runtime loop
unrolling. The later loop unrolling invocation will also eventually
utilize profile summary and branch frequency information, which
we would like to use to control peeling. And for ThinLTO we want
to delay peeling until the backend (post thin link) phase, just as
we do for most types of unrolling.

Ensure peeling doesn't occur during the full unrolling invocation
by adding a parameter to the shared implementation function, similar
to the way partial and runtime loop unrolling are disabled.

Performance results for ThinLTO suggest this has a neutral to positive
effect on some internal benchmarks.

Reviewers: chandlerc, davidxl

Subscribers: mzolotukhin, llvm-commits, mehdi_amini

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

llvm-svn: 309966

7 years agoDo not want to use BFI to get profile count for sample pgo
Dehao Chen [Thu, 3 Aug 2017 17:11:41 +0000 (17:11 +0000)]
Do not want to use BFI to get profile count for sample pgo

Summary: For SamplePGO, we already record the callsite count in the call instruction itself. So we do not want to use BFI to get profile count as it is less accurate.

Reviewers: tejohnson, davidxl, eraman

Reviewed By: eraman

Subscribers: sanjoy, llvm-commits, mehdi_amini

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

llvm-svn: 309964

7 years ago[X86] Adding a test for vector shuffle extractions.
Simon Pilgrim [Thu, 3 Aug 2017 17:04:59 +0000 (17:04 +0000)]
[X86] Adding a test for vector shuffle extractions.

When both the vector inputs of the shuffle vector is comprising of same vector or shuffle mask is accessing elements from only one operand vector (like in PR33758 test already present).

Committed on behalf of @jbhateja (Jatin Bhateja)

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

llvm-svn: 309963

7 years agoRevert "[AArch64] Simplify AES*Tied pseudo expansion (NFC)."
Tim Northover [Thu, 3 Aug 2017 16:59:36 +0000 (16:59 +0000)]
Revert "[AArch64] Simplify AES*Tied pseudo expansion (NFC)."

This reverts commit r309821.

My suggestion was wrong because it left the MachineOperands tied which
confused the verifier. Since there's no easy way to untie operands, the
original BuildMI solution is probably best.

llvm-svn: 309962

7 years ago[X86][AVX512] Tidied up v64i8 vector shuffle tests with triple
Simon Pilgrim [Thu, 3 Aug 2017 16:56:52 +0000 (16:56 +0000)]
[X86][AVX512] Tidied up v64i8 vector shuffle tests with triple

llvm-svn: 309961

7 years agoRevert r304836.
Nico Weber [Thu, 3 Aug 2017 16:46:17 +0000 (16:46 +0000)]
Revert r304836.

See discussion in https://reviews.llvm.org/D33900#824172

llvm-svn: 309960

7 years agoAMDGPU/SI: Don't fix a PHI under uniform branch in SIFixSGPRCopies only when sources...
Changpeng Fang [Thu, 3 Aug 2017 16:37:02 +0000 (16:37 +0000)]
AMDGPU/SI: Don't fix a PHI under uniform branch in SIFixSGPRCopies only when sources and destination are all sgprs

Summary:
  If a PHI has at lease one VGPR operand, we have to fix the PHI
in SIFixSGPRCopies.

Reviewer:
  Matt

Differential Revision:
  http://reviews.llvm.org/D34727

llvm-svn: 309959

7 years ago[diagtool] Add ability to pass in the id and return the name for a
Don Hinton [Thu, 3 Aug 2017 16:13:13 +0000 (16:13 +0000)]
[diagtool] Add ability to pass in the id and return the name for a
particular diagnostic.

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

llvm-svn: 309955

7 years ago[ELF] - Do not segfault if linkerscript tries to access Target too early.
George Rimar [Thu, 3 Aug 2017 16:05:08 +0000 (16:05 +0000)]
[ELF] - Do not segfault if linkerscript tries to access Target too early.

Following possible scripts triggered accessing to Target when it was not yet
initialized (was nullptr).

MEMORY { name : ORIGIN = DATA_SEGMENT_RELRO_END; }
MEMORY { name : ORIGIN = CONSTANT(COMMONPAGESIZE); }

Patch errors out instead.

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

llvm-svn: 309953

7 years agoFix use after free in unit test.
Benjamin Kramer [Thu, 3 Aug 2017 15:59:37 +0000 (15:59 +0000)]
Fix use after free in unit test.

llvm-svn: 309952

7 years ago[DAG] Allow merging of stores of vector loads
Nirav Dave [Thu, 3 Aug 2017 15:51:20 +0000 (15:51 +0000)]
[DAG]  Allow merging of stores of vector loads

Remove restriction disallowing merging of stores vector loads into
larger store of larger vector load.

Reviewers: RKSimon, efriedma, spatel

Subscribers: llvm-commits

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

llvm-svn: 309951

7 years agoRevert r309923, it caused PR34045.
Nico Weber [Thu, 3 Aug 2017 15:41:26 +0000 (15:41 +0000)]
Revert r309923, it caused PR34045.

llvm-svn: 309950

7 years ago[TableGen] AsmMatcher: fix OpIdx computation when HasOptionalOperands is true
Nirav Dave [Thu, 3 Aug 2017 15:40:21 +0000 (15:40 +0000)]
[TableGen] AsmMatcher: fix OpIdx computation when HasOptionalOperands is true

Consider the following instruction: "inst.eq $dst, $src" where ".eq"
is an optional flag operand.  The $src and $dst operands are
registers.  If we parse the instruction "inst r0, r1", the flag is not
present and it will be marked in the "OptionalOperandsMask" variable.
After the matching is complete we call the "convertToMCInst" method.

The current implementation works only if the optional operands are at
the end of the array.  The "Operands" array looks like [token:"inst",
reg:r0, reg:r1].  The first operand that must be added to the MCInst
is the destination, the r0 register.  The "OpIdx" (in the Operands
array) for this register is 2.  However, since the flag is not present
in the Operands, the actual index for r0 should be 1.  The flag is not
present since we rely on the default value.

This patch removes the "NumDefaults" variable and replaces it with an
array (DefaultsOffset).  This array contains an index for each operand
(excluding the mnemonic).  At each index, the array contains the
number of optional operands that should be subtracted.  For the
previous example, this array looks like this: [0, 1, 1].  When we need
to access the r0 register, we compute its index as 2 -
DefaultsOffset[1] = 1.

Patch by Alexandru Guduleasa!

Reviewers: SamWot, nhaustov, niravd

Subscribers: llvm-commits

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

llvm-svn: 309949

7 years agoFix some typos in the documentation.
Gabor Horvath [Thu, 3 Aug 2017 15:38:14 +0000 (15:38 +0000)]
Fix some typos in the documentation.

Patch by: Reka Nikolett Kovacs

llvm-svn: 309948

7 years ago[VirtualInstruction] Avoid use of getStmtFor(BB). NFC.
Michael Kruse [Thu, 3 Aug 2017 15:27:00 +0000 (15:27 +0000)]
[VirtualInstruction] Avoid use of getStmtFor(BB). NFC.

With this patch, we get rid of the last use of getStmtFor(BB). Here
this is done by getting the last statement of the incoming block in
case the user is a phi node; otherwise just fetching the statement
comprising the instruction for which the virtual use is being created.

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

llvm-svn: 309947

7 years ago[NewGVN] fix typos; NFC
Sanjay Patel [Thu, 3 Aug 2017 15:18:27 +0000 (15:18 +0000)]
[NewGVN] fix typos; NFC

llvm-svn: 309946

7 years ago[BDCE] add tests to show invalid/incomplete transforms
Sanjay Patel [Thu, 3 Aug 2017 15:07:37 +0000 (15:07 +0000)]
[BDCE] add tests to show invalid/incomplete transforms

llvm-svn: 309945

7 years ago[GlobalISel] Only merge memory ops for mayLoad or mayStore instrs.
Florian Hahn [Thu, 3 Aug 2017 14:48:22 +0000 (14:48 +0000)]
[GlobalISel] Only merge memory ops for mayLoad or mayStore instrs.

Summary:
We only need to merge memory operands for instructions that access
 memory. This slightly reduces the number of actions executed.

Reviewers: MatzeB, rovka, dsanders

Reviewed By: dsanders

Subscribers: aemerson, igorb, kristof.beyls, llvm-commits

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

llvm-svn: 309944

7 years agoAdd missing REQUIRES line
Tobias Grosser [Thu, 3 Aug 2017 14:46:53 +0000 (14:46 +0000)]
Add missing REQUIRES line

llvm-svn: 309943

7 years ago[mips] Fixup r309940.
Simon Dardis [Thu, 3 Aug 2017 14:35:06 +0000 (14:35 +0000)]
[mips] Fixup r309940.

Needed a // REQUIRES: mips-registered-target

llvm-svn: 309942

7 years ago[clang-format] Fix indent of 'key <...>' and 'key {...}' in text protos
Krasimir Georgiev [Thu, 3 Aug 2017 14:17:29 +0000 (14:17 +0000)]
[clang-format] Fix indent of 'key <...>' and 'key {...}' in text protos

Summary:
This patch fixes the indentation of the code pattern `key <...>`and `key {...}` in text protos.
Previously, such line would be alinged depending on the column of the previous
colon, which usually indents too much.

I'm gonna go ahead and commit this since it's a straightforward bugfix.

Reviewers: djasper, klimek

Subscribers: klimek, cfe-commits

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

llvm-svn: 309941

7 years ago[mips] Implement -muninit-const-in-rodata
Simon Dardis [Thu, 3 Aug 2017 14:01:17 +0000 (14:01 +0000)]
[mips] Implement -muninit-const-in-rodata

This option when combined with -mgpopt and -membedded-data places all
uninitialized constant variables in the read-only section.

Reviewers: atanasyan, nitesh.jain

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

llvm-svn: 309940

7 years agoMake sure that all parameter dimensions are set in schedule
Tobias Grosser [Thu, 3 Aug 2017 13:51:15 +0000 (13:51 +0000)]
Make sure that all parameter dimensions are set in schedule

Summary:
In case the option -polly-ignore-parameter-bounds is set, not all parameters
will be added to context and domains. This is useful to keep the size of the
sets and maps we work with small. Unfortunately, for AST generation it is
necessary to ensure all parameters are part of the schedule tree. Hence,
we modify the GPGPU code generation to make sure this is the case.

To obtain the necessary information we expose a new function
Scop::getFullParamSpace(). We also make a couple of functions const to be
able to make SCoP::getFullParamSpace() const.

Reviewers: Meinersbur, bollu, gareevroman, efriedma, huihuiz, sebpop, simbuerg

Subscribers: nemanjai, kbarton, pollydev, llvm-commits

Tags: #polly

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

llvm-svn: 309939

7 years ago[test] Fix test case without Polly-ACC.
Michael Kruse [Thu, 3 Aug 2017 13:44:31 +0000 (13:44 +0000)]
[test] Fix test case without Polly-ACC.

llvm-svn: 309938

7 years ago[clang-format] Fix parsing of <>-style proto options
Krasimir Georgiev [Thu, 3 Aug 2017 13:43:45 +0000 (13:43 +0000)]
[clang-format] Fix parsing of <>-style proto options

Summary:
This patch fixes the parsing of proto option fields like `option op = <...>`.
Previously the parser did not enter the right code path inside the angle braces,
causing the contents to be split into several unwrapped lines inside.

I'll just go ahead and commit this since it's a straightforward bugfix.

Reviewers: djasper, klimek

Subscribers: cfe-commits

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

llvm-svn: 309937

7 years agoClangdTests: Try to unbreak the case CLANG_DEFAULT_CXX_STDLIB=libc++.
NAKAMURA Takumi [Thu, 3 Aug 2017 13:30:43 +0000 (13:30 +0000)]
ClangdTests: Try to unbreak the case CLANG_DEFAULT_CXX_STDLIB=libc++.

llvm-svn: 309936

7 years ago[mips] Add support -m(no-)embedded-data option
Simon Dardis [Thu, 3 Aug 2017 13:04:29 +0000 (13:04 +0000)]
[mips] Add support -m(no-)embedded-data option

Add support for the -membedded-data option which places constant data in
the .rodata section, rather than the .sdata section.

Reviewers: atanasyan, nitesh.jain

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

llvm-svn: 309935

7 years ago[PPCGCodeGeneration] Construct `isl_multi_pw_aff` of PPCGArray.bounds even when polly...
Siddharth Bhat [Thu, 3 Aug 2017 12:09:33 +0000 (12:09 +0000)]
[PPCGCodeGeneration] Construct `isl_multi_pw_aff` of PPCGArray.bounds even when polly-ignore-parameter-bounds is turned on.

When we have `-polly-ignore-parameter-bounds`, `Scop::Context` does not contain
all the paramters present in the program.

The construction of the `isl_multi_pw_aff` requires all the indivisual `pw_aff`
to have the same parameter dimensions. To achieve this, we used to realign
every `pw_aff` with `Scop::Context`. However, in conjunction with
`-polly-ignore-parameter-bounds`, this is now incorrect, since `Scop::Context`
does not contain all parameters.

We set this up correctly by creating a space that has all the parameters
used by all the `isl_pw_aff`. Then, we realign all `isl_pw_aff` to this space.

llvm-svn: 309934

7 years ago[LiveDebugVariables] Use lexical scope to trim debug value live intervals
Robert Lougher [Thu, 3 Aug 2017 11:54:02 +0000 (11:54 +0000)]
[LiveDebugVariables] Use lexical scope to trim debug value live intervals

The debug value live intervals computed by Live Debug Variables may extend
beyond the range of the debug location's lexical scope. In this case,
splitting of an interval can result in an interval outside of the scope being
created, causing extra unnecessary DBG_VALUEs to be emitted. To prevent this,
trim the intervals to the lexical scope.

This resolves PR33730.

Reviewers: aprantl

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

llvm-svn: 309933

7 years agoPrune linefeed at eof.
NAKAMURA Takumi [Thu, 3 Aug 2017 11:36:44 +0000 (11:36 +0000)]
Prune linefeed at eof.

llvm-svn: 309932

7 years agollvm/Support/CodeGenCWrappers.h: Add missing "llvm/ADT/Optional.h", to fix modules...
NAKAMURA Takumi [Thu, 3 Aug 2017 11:36:42 +0000 (11:36 +0000)]
llvm/Support/CodeGenCWrappers.h: Add missing "llvm/ADT/Optional.h", to fix modules build.

llvm-svn: 309931

7 years ago[SelectionDAG] Resolve PR33978.
Simon Dardis [Thu, 3 Aug 2017 09:38:46 +0000 (09:38 +0000)]
[SelectionDAG] Resolve PR33978.

rL306209 taught SelectionDAG how to add the dereferenceable flag when
expanding memcpy and memmove. The fix however contained a nit where
the offset + size was constructed as an APInt of PointerSize rather
than PointerSizeInBits.

This lead to isDereferenceableAndAlignedPointer() get truncated values or
values which would be sign extended within that function leading to
incorrect results.

Thanks to Alex Crichton for reporting the issue!

This resolves PR33978.

Reviewers: inouehrs

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

llvm-svn: 309930

7 years agoRemoved unused variabled from unit test
Max Kazantsev [Thu, 3 Aug 2017 09:25:44 +0000 (09:25 +0000)]
Removed unused variabled from unit test

llvm-svn: 309929

7 years ago[Cloning] Move distinct GlobalVariable debug info metadata in CloneModule
Ewan Crawford [Thu, 3 Aug 2017 09:23:03 +0000 (09:23 +0000)]
[Cloning] Move distinct GlobalVariable debug info metadata in CloneModule

Duplicating the distinct Subprogram and CU metadata nodes seems like the incorrect thing to do in CloneModule for GlobalVariable debug info. As it results in the scope of the GlobalVariable DI no longer being consistent with the rest of the module, and the new CU is absent from llvm.dbg.cu.

Fixed by adding RF_MoveDistinctMDs to MapMetadata flags for GlobalVariables.

Current unit test IR after clone:
```
@gv = global i32 1, comdat($comdat), !dbg !0, !type !5

define private void @f() comdat($comdat) personality void ()* @persfn !dbg !14 {

!llvm.dbg.cu = !{!10}

!0 = !DIGlobalVariableExpression(var: !1)
!1 = distinct !DIGlobalVariable(name: "gv", linkageName: "gv", scope: !2, file: !3, line: 1, type: !9, isLocal: false, isDefinition: true)
!2 = distinct !DISubprogram(name: "f", linkageName: "f", scope: null, file: !3, line: 4, type: !4, isLocal: true, isDefinition: true, scopeLine: 3, isOptimized: false, unit: !6, variables: !5)
!3 = !DIFile(filename: "filename.c", directory: "/file/dir/")
!4 = !DISubroutineType(types: !5)
!5 = !{}
!6 = distinct !DICompileUnit(language: DW_LANG_C99, file: !7, producer: "CloneModule", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !5, globals: !8)
!7 = !DIFile(filename: "filename.c", directory: "/file/dir")
!8 = !{!0}
!9 = !DIBasicType(tag: DW_TAG_unspecified_type, name: "decltype(nullptr)")
!10 = distinct !DICompileUnit(language: DW_LANG_C99, file: !7, producer: "CloneModule", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !5, globals: !11)
!11 = !{!12}
!12 = !DIGlobalVariableExpression(var: !13)
!13 = distinct !DIGlobalVariable(name: "gv", linkageName: "gv", scope: !14, file: !3, line: 1, type: !9, isLocal: false, isDefinition: true)
!14 = distinct !DISubprogram(name: "f", linkageName: "f", scope: null, file: !3, line: 4, type: !4, isLocal: true, isDefinition: true, scopeLine: 3, isOptimized: false, unit: !10, variables: !5)
```

Patched IR after clone:
```
@gv = global i32 1, comdat($comdat), !dbg !0, !type !5

define private void @f() comdat($comdat) personality void ()* @persfn !dbg !2 {

!llvm.dbg.cu = !{!6}

!0 = !DIGlobalVariableExpression(var: !1)
!1 = distinct !DIGlobalVariable(name: "gv", linkageName: "gv", scope: !2, file: !3, line: 1, type: !9, isLocal: false, isDefinition: true)
!2 = distinct !DISubprogram(name: "f", linkageName: "f", scope: null, file: !3, line: 4, type: !4, isLocal: true, isDefinition: true, scopeLine: 3, isOptimized: false, unit: !6, variables: !5)
!3 = !DIFile(filename: "filename.c", directory: "/file/dir/")
!4 = !DISubroutineType(types: !5)
!5 = !{}
!6 = distinct !DICompileUnit(language: DW_LANG_C99, file: !7, producer: "CloneModule", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !5, globals: !8)
!7 = !DIFile(filename: "filename.c", directory: "/file/dir")
!8 = !{!0}
!9 = !DIBasicType(tag: DW_TAG_unspecified_type, name: "decltype(nullptr)")
```

Reviewers: aprantl, probinson, dblaikie, echristo, loladiro
Reviewed By: aprantl
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D36082

llvm-svn: 309928

7 years ago[ARM] GlobalISel: Select simple G_GLOBAL_VALUE instructions
Diana Picus [Thu, 3 Aug 2017 09:14:59 +0000 (09:14 +0000)]
[ARM] GlobalISel: Select simple G_GLOBAL_VALUE instructions

Add support in the instruction selector for G_GLOBAL_VALUE for ELF and
MachO for the static relocation model. We don't handle Windows yet
because that's Thumb-only, and we don't handle Thumb in general at the
moment.

Support for PIC, ROPI, RWPI and TLS will be added in subsequent commits.

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

llvm-svn: 309927

7 years ago[X86] SET0 to use XMM registers where possible PR26018 PR32862
Dinar Temirbulatov [Thu, 3 Aug 2017 08:50:18 +0000 (08:50 +0000)]
[X86] SET0 to use XMM registers where possible PR26018 PR32862

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

llvm-svn: 309926

7 years ago[SCEV] Re-enable "Cache results of computeExitLimit"
Max Kazantsev [Thu, 3 Aug 2017 08:41:30 +0000 (08:41 +0000)]
[SCEV] Re-enable "Cache results of computeExitLimit"

The patch rL309080 was reverted because it did not clean up the cache on "forgetValue"
method call. This patch re-enables this change, adds the missing check and introduces
two new unit tests that make sure that the cache is cleaned properly.

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

llvm-svn: 309925

7 years ago[globalisel][tablegen] Update a comment to use the name of the constant rather than...
Daniel Sanders [Thu, 3 Aug 2017 08:38:04 +0000 (08:38 +0000)]
[globalisel][tablegen] Update a comment to use the name of the constant rather than the value.

llvm-svn: 309924

7 years ago[ARM] Use ADDCARRY / SUBCARRY
Roger Ferrer Ibanez [Thu, 3 Aug 2017 07:45:10 +0000 (07:45 +0000)]
[ARM] Use ADDCARRY / SUBCARRY

This patch:

- makes nodes ISD::ADDCARRY and ISD::SUBCARRY legal for i32
- lowering is done by first converting the boolean value into the carry flag
  using (_, C) <- (ARMISD::ADDC R, -1) and converted back to an integer value
  using (R, _) <- (ARMISD::ADDE 0, 0, C). An ARMISD::ADDE between the two
  operations does the actual addition.
- for subtraction, given that ISD::SUBCARRY second result is actually a
  borrow, we need to invert the value of the second operand and result before
  and after using ARMISD::SUBE. We need to invert the carry result of
  ARMISD::SUBE to preserve the semantics.
- given that the generic combiner may lower ISD::ADDCARRY and
  ISD::SUBCARRY into ISD::UADDO and ISD::USUBO we need to update their lowering
  as well otherwise i64 operations now would require branches. This implies
  updating the corresponding test for unsigned.
- add new combiner to remove the redundant conversions from/to carry flags
  to/from boolean values (ARMISD::ADDC (ARMISD::ADDE 0, 0, C), -1) -> C

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

llvm-svn: 309923

7 years agoFix WebAssembly target after r309911.
Daniel Jasper [Thu, 3 Aug 2017 05:15:53 +0000 (05:15 +0000)]
Fix WebAssembly target after r309911.

llvm-svn: 309922