1. Jul 09, 2019
    • Jinsong Ji's avatar
      [PowerPC][MachinePipeliner][NFC] Add a testcase for Phi bug. · 18301fa8
      Jinsong Ji authored
      llvm-svn: 365427
      18301fa8
    • Heejin Ahn's avatar
      [WebAssembly] Make sret parameter work with AddMissingPrototypes · 947bfe73
      Heejin Ahn authored
      Summary:
      Even with functions with `no-prototype` attribute, there can be an
      argument `sret` (structure return) attribute, which is an optimization
      when a function return type is a struct. Fixes PR42420.
      
      Reviewers: sbc100
      
      Subscribers: dschuff, jgravelle-google, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D64318
      
      llvm-svn: 365426
      947bfe73
    • Philip Reames's avatar
      0e344e9d
    • Matthew G McGovern's avatar
      [sanitizers][windows] FIX: Rtl-Heap Interception and tests · 4e636156
      Matthew G McGovern authored
         - Adds interceptors for Rtl[Allocate|Free|Size|ReAllocate]Heap
         - Adds unit tests for the new interceptors and expands HeapAlloc
           tests to demonstrate new functionality.
         Reviewed as D62927
         - adds fixes for ~win and x64 tests
      
      > llvm-svn: 365381
      
      llvm-svn: 365424
      4e636156
    • Yonghong Song's avatar
      [BPF] add new intrinsics preserve_{array,union,struct}_access_index · e3919c6b
      Yonghong Song authored
      For background of BPF CO-RE project, please refer to
        http://vger.kernel.org/bpfconf2019.html
      
      
      In summary, BPF CO-RE intends to compile bpf programs
      adjustable on struct/union layout change so the same
      program can run on multiple kernels with adjustment
      before loading based on native kernel structures.
      
      In order to do this, we need keep track of GEP(getelementptr)
      instruction base and result debuginfo types, so we
      can adjust on the host based on kernel BTF info.
      Capturing such information as an IR optimization is hard
      as various optimization may have tweaked GEP and also
      union is replaced by structure it is impossible to track
      fieldindex for union member accesses.
      
      Three intrinsic functions, preserve_{array,union,struct}_access_index,
      are introducted.
        addr = preserve_array_access_index(base, index, dimension)
        addr = preserve_union_access_index(base, di_index)
        addr = preserve_struct_access_index(base, gep_index, di_index)
      here,
        base: the base pointer for the array/union/struct access.
        index: the last access index for array, the same for IR/DebugInfo layout.
        dimension: the array dimension.
        gep_index: the access index based on IR layout.
        di_index: the access index based on user/debuginfo types.
      
      For example, for the following example,
        $ cat test.c
        struct sk_buff {
           int i;
           int b1:1;
           int b2:2;
           union {
             struct {
               int o1;
               int o2;
             } o;
             struct {
               char flags;
               char dev_id;
             } dev;
             int netid;
           } u[10];
        };
      
        static int (*bpf_probe_read)(void *dst, int size, const void *unsafe_ptr)
            = (void *) 4;
      
        #define _(x) (__builtin_preserve_access_index(x))
      
        int bpf_prog(struct sk_buff *ctx) {
          char dev_id;
          bpf_probe_read(&dev_id, sizeof(char), _(&ctx->u[5].dev.dev_id));
          return dev_id;
        }
        $ clang -target bpf -O2 -g -emit-llvm -S -mllvm -print-before-all \
          test.c >& log
      
      The generated IR looks like below:
      
        ...
        define dso_local i32 @bpf_prog(%struct.sk_buff*) #0 !dbg !15 {
          %2 = alloca %struct.sk_buff*, align 8
          %3 = alloca i8, align 1
          store %struct.sk_buff* %0, %struct.sk_buff** %2, align 8, !tbaa !45
          call void @llvm.dbg.declare(metadata %struct.sk_buff** %2, metadata !43, metadata !DIExpression()), !dbg !49
          call void @llvm.lifetime.start.p0i8(i64 1, i8* %3) #4, !dbg !50
          call void @llvm.dbg.declare(metadata i8* %3, metadata !44, metadata !DIExpression()), !dbg !51
          %4 = load i32 (i8*, i32, i8*)*, i32 (i8*, i32, i8*)** @bpf_probe_read, align 8, !dbg !52, !tbaa !45
          %5 = load %struct.sk_buff*, %struct.sk_buff** %2, align 8, !dbg !53, !tbaa !45
          %6 = call [10 x %union.anon]* @llvm.preserve.struct.access.index.p0a10s_union.anons.p0s_struct.sk_buffs(
               %struct.sk_buff* %5, i32 2, i32 3), !dbg !53, !llvm.preserve.access.index !19
          %7 = call %union.anon* @llvm.preserve.array.access.index.p0s_union.anons.p0a10s_union.anons(
               [10 x %union.anon]* %6, i32 1, i32 5), !dbg !53
          %8 = call %union.anon* @llvm.preserve.union.access.index.p0s_union.anons.p0s_union.anons(
               %union.anon* %7, i32 1), !dbg !53, !llvm.preserve.access.index !26
          %9 = bitcast %union.anon* %8 to %struct.anon.0*, !dbg !53
          %10 = call i8* @llvm.preserve.struct.access.index.p0i8.p0s_struct.anon.0s(
               %struct.anon.0* %9, i32 1, i32 1), !dbg !53, !llvm.preserve.access.index !34
          %11 = call i32 %4(i8* %3, i32 1, i8* %10), !dbg !52
          %12 = load i8, i8* %3, align 1, !dbg !54, !tbaa !55
          %13 = sext i8 %12 to i32, !dbg !54
          call void @llvm.lifetime.end.p0i8(i64 1, i8* %3) #4, !dbg !56
          ret i32 %13, !dbg !57
        }
      
        !19 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "sk_buff", file: !3, line: 1, size: 704, elements: !20)
        !26 = distinct !DICompositeType(tag: DW_TAG_union_type, scope: !19, file: !3, line: 5, size: 64, elements: !27)
        !34 = distinct !DICompositeType(tag: DW_TAG_structure_type, scope: !26, file: !3, line: 10, size: 16, elements: !35)
      
      Note that @llvm.preserve.{struct,union}.access.index calls have metadata llvm.preserve.access.index
      attached to instructions to provide struct/union debuginfo type information.
      
      For &ctx->u[5].dev.dev_id,
        . The "%6 = ..." represents struct member "u" with index 2 for IR layout and index 3 for DI layout.
        . The "%7 = ..." represents array subscript "5".
        . The "%8 = ..." represents union member "dev" with index 1 for DI layout.
        . The "%10 = ..." represents struct member "dev_id" with index 1 for both IR and DI layout.
      
      Basically, traversing the use-def chain recursively for the 3rd argument of bpf_probe_read() and
      examining all preserve_*_access_index calls, the debuginfo struct/union/array access index
      can be achieved.
      
      The intrinsics also contain enough information to regenerate codes for IR layout.
      For array and structure intrinsics, the proper GEP can be constructed.
      For union intrinsics, replacing all uses of "addr" with "base" should be enough.
      
      The test case ThinLTO/X86/lazyload_metadata.ll is adjusted to reflect the
      new addition of the metadata.
      
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      
      Differential Revision: https://reviews.llvm.org/D61810
      
      llvm-svn: 365423
      e3919c6b
    • Matthew G McGovern's avatar
      [sanitizers][windows] Rtl-Heap Interception and tests · 848a19e4
      Matthew G McGovern authored
         - Adds interceptors for Rtl[Allocate|Free|Size|ReAllocate]Heap
         - Adds unit tests for the new interceptors and expands HeapAlloc
           tests to demonstrate new functionality.
         Reviewed as D62927
      
      llvm-svn: 365422
      848a19e4
    • Jonas Devlieghere's avatar
      Fix ASCII art header · 53d5f3a0
      Jonas Devlieghere authored
      llvm-svn: 365421
      53d5f3a0
    • Jonas Devlieghere's avatar
      [Windows] Include ErrorHandling.h · 4936cbc9
      Jonas Devlieghere authored
      Include ErrorHandling.h for mapWindowsError.
      
      llvm-svn: 365420
      4936cbc9
    • Philip Reames's avatar
      [LoopPred] Extend LFTR normalization to the inverse EQ case · 5a637cbd
      Philip Reames authored
      A while back, I added support for NE latches formed by LFTR.  I didn't think that quite through, as LFTR will also produce the inverse EQ form for some loops and I hadn't handled that.  This change just adds handling for that case as well.
      
      llvm-svn: 365419
      5a637cbd
    • Heejin Ahn's avatar
      [WebAssembly] Fix a typo in a test file name · 8f9a4b2a
      Heejin Ahn authored
      Reviewers: sbc100
      
      Subscribers: dschuff, jgravelle-google, sunfish, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D64324
      
      llvm-svn: 365418
      8f9a4b2a
    • Nilanjana Basu's avatar
      Changing CodeView debug info type record representation in assembly files to... · faed8516
      Nilanjana Basu authored
      Changing CodeView debug info type record representation in assembly files to make it more human-readable & editable & fixing bug introduced in r364987
      
      llvm-svn: 365417
      faed8516
    • Davide Italiano's avatar
      [crashlog] Fix a mismatch between bytes and strings. · 68946d10
      Davide Italiano authored
      The functions in read_plist() want bytes as input, not
      strings.
      
      <rdar://problem/52600712>
      
      llvm-svn: 365416
      68946d10
    • Julian Lettner's avatar
      [TSan] Fix linker error for Linux/AArch64 · c6fe02b6
      Julian Lettner authored
      llvm-svn: 365415
      c6fe02b6
    • Nico Weber's avatar
      Use `ln -n` to prevent forming a symlink cycle, instead of rm'ing the source · 9d2538d2
      Nico Weber authored
      This is a better fix for the problem fixed in r334972.
      
      Also remove the rm'ing of the symlink destination that was there to
      clean up the bots -- it's over a year later, bots should be happy now.
      
      Differential Revision: https://reviews.llvm.org/D64301
      
      llvm-svn: 365414
      9d2538d2
    • Nico Weber's avatar
      Let unaliased Args track which Alias they were created from, and use that in... · e3f06b47
      Nico Weber authored
      Let unaliased Args track which Alias they were created from, and use that in Arg::getAsString() for diagnostics
      
      With this, `clang-cl /source-charset:utf-16 test.cc` now prints `invalid
      value 'utf-16' in '/source-charset:utf-16'` instead of `invalid value
      'utf-16' in '-finput-charset=utf-16'` before, and several other clang-cl
      flags produce much less confusing output as well.
      
      Fixes PR29106.
      
      Since an arg and its alias can have different arg types (joined vs not)
      and different values (because of AliasArgs<>), I chose to give the Alias
      its own Arg object. For convenience, I just store the alias directly in
      the unaliased arg – there aren't many arg objects at runtime, so that
      seems ok.
      
      Finally, I changed Arg::getAsString() to use the alias's representation
      if it's present – that function was already documented as being the
      suitable function for diagnostics, and most callers already used it for
      diagnostics.
      
      Implementation-wise, Arg::accept() previously used to parse things as
      the unaliased option. The core of that switch is now extracted into a
      new function acceptInternal() which parses as the _aliased_ option, and
      the previously-intermingled unaliasing is now done as an explicit step
      afterwards.
      
      (This also changes one place in lld that didn't use getAsString() for
      diagnostics, so that that one place now also prints the flag as the user
      wrote it, not as it looks after it went through unaliasing.)
      
      Differential Revision: https://reviews.llvm.org/D64253
      
      llvm-svn: 365413
      e3f06b47
    • Fangrui Song's avatar
      [X86][PPC] Support -mlong-double-64 · 11cb39c5
      Fangrui Song authored
      -mlong-double-64 is supported on some ports of gcc (i386, x86_64, and ppc{32,64}).
      On many other targets, there will be an error:
      
          error: unrecognized command line option '-mlong-double-64'
      
      This patch makes the driver option -mlong-double-64 available for x86
      and ppc. The CC1 option -mlong-double-64 is available on all targets for
      users to test on unsupported targets.
      
      LongDoubleSize is added as a VALUE_LANGOPT so that the option can be
      shared with -mlong-double-128 when we support it in clang.
      
      Also, make powerpc*-linux-musl default to use 64-bit long double. It is
      currently the only supported ABI on musl and is also how people
      configure powerpc*-linux-musl-gcc.
      
      Reviewed By: rnk
      
      Differential Revision: https://reviews.llvm.org/D64067
      
      llvm-svn: 365412
      11cb39c5
    • Nico Weber's avatar
      clang-cl: Port cl.exe's C4659 to clang-cl · 98016216
      Nico Weber authored
      Differential Revision: https://reviews.llvm.org/D64349
      
      llvm-svn: 365411
      98016216
    • Artem Dergachev's avatar
      [analyzer] exploded-graph-rewriter: Implement a topology-only mode. · c6b5c5b9
      Artem Dergachev authored
      In this mode the rewriter will only rewrite program points
      and omit program states. Useful for understanding
      the rough topology of the graph.
      
      Differential Revision: https://reviews.llvm.org/D64264
      
      llvm-svn: 365410
      c6b5c5b9
    • Artem Dergachev's avatar
      [analyzer] exploded-graph-rewriter: Implement a single-path mode. · 78566e45
      Artem Dergachev authored
      Instead of rewriting the whole graph, rewrite the leftmost path in the
      graph. Useful for trimmed graphs that are still too large to display due
      to multiple equivalent reports mixed into them.
      
      Differential Revision: https://reviews.llvm.org/D64263
      
      llvm-svn: 365409
      78566e45
    • Erik Pilkington's avatar
      [ObjC] Add a -Wtautological-compare warning for BOOL · fa591c37
      Erik Pilkington authored
      On macOS, BOOL is a typedef for signed char, but it should never hold a value
      that isn't 1 or 0. Any code that expects a different value in their BOOL should
      be fixed.
      
      rdar://51954400
      
      Differential revision: https://reviews.llvm.org/D63856
      
      llvm-svn: 365408
      fa591c37
    • Johannes Doerfert's avatar
      [Attributor] Deduce the "returned" argument attribute · accd3e87
      Johannes Doerfert authored
      Deduce the "returned" argument attribute by collecting all potentially
      returned values.
      
      Not only the unique return value, if any, can be used by subsequent
      attributes but also the set of all potentially returned values as well
      as the mapping from returned values to return instructions that they
      originate from (see AAReturnedValues::checkForallReturnedValues).
      
      Change in statistics (-stats) for LLVM-TS + Spec2006, totaling ~19% more "returned" arguments.
      
        ADDED: attributor                   NumAttributesManifested                  n/a ->        637
        ADDED: attributor                   NumAttributesValidFixpoint               n/a ->      25545
        ADDED: attributor                   NumFnArgumentReturned                    n/a ->        637
        ADDED: attributor                   NumFnKnownReturns                        n/a ->      25545
        ADDED: attributor                   NumFnUniqueReturned                      n/a ->      14118
      CHANGED: deadargelim                  NumRetValsEliminated                     470 ->        449 (    -4.468%)
      REMOVED: functionattrs                NumReturned                              535 ->        n/a
      CHANGED: indvars                      NumElimIdentity                          138 ->        164 (   +18.841%)
      
      Reviewers: homerdin, hfinkel, fedor.sergeev, sanjoy, spatel, nlopes, nicholas, reames, efriedma, chandlerc
      
      Subscribers: hiraditya, bollu, cfe-commits, llvm-commits
      
      Tags: #clang, #llvm
      
      Differential Revision: https://reviews.llvm.org/D59919
      
      llvm-svn: 365407
      accd3e87
    • David Blaikie's avatar
      [cxx2a] P0624R2 fix: only lambdas with no lambda-capture are default-constructible and assignable. · 793231c3
      David Blaikie authored
      This is a fix for rG864949 which only disabled default construction and
      assignment for lambdas with capture-defaults, where the C++2a draft
      disables them for lambdas with any lambda-capture at all.
      
      Patch by Logan Smith!
      
      Differential Revision: https://reviews.llvm.org/D64058
      
      llvm-svn: 365406
      793231c3
    • Francis Visoiu Mistrih's avatar
      [Frontend] Explicitly include Bitstream/BitCodes.h and BitstreamWriter.h · 315ce839
      Francis Visoiu Mistrih authored
      This fixes a modules issue:
      
      error: declaration of 'bitc' must be imported from module
      'Clang_Serialization.ASTBitCodes' before it is required
      Stream.EmitRecord(llvm::bitc::BLOCKINFO_CODE_SETBID, Record);
      
      llvm-svn: 365405
      315ce839
    • Jessica Paquette's avatar
      [AArch64][GlobalISel] Use TST for comparisons when possible · 55d19247
      Jessica Paquette authored
      Porting over the part of `emitComparison` in AArch64ISelLowering where we use
      TST to represent a compare.
      
      - Rename `tryOptCMN` to `tryFoldIntegerCompare`, since it now also emits TSTs
        when possible.
      
      - Add a utility function for emitting a TST with register operands.
      
      - Rename opt-fold-cmn.mir to opt-fold-compare.mir, since it now also tests the
        TST fold as well.
      
      Differential Revision: https://reviews.llvm.org/D64371
      
      llvm-svn: 365404
      55d19247
    • Jonas Devlieghere's avatar
      [ThreadLauncher] Use mapWindowsError and LLDB_INVALID_HOST_THREAD · ba06f15a
      Jonas Devlieghere authored
      Address post-commit feedback from Pavel and Jim.
      
      llvm-svn: 365403
      ba06f15a
    • Paul Robinson's avatar
      Fix line endings. NFC · 62cbe8ce
      Paul Robinson authored
      llvm-svn: 365402
      62cbe8ce
    • Rong Xu's avatar
      [llvm-profdata] Fix buildbot failure on llvm-clang-x86_64-expensive-checks-win · c23da482
      Rong Xu authored
      This fixes buildbot failure in LLVM on llvm-clang-x86_64-expensive-checks-win
      from r365386.
      
      llvm-svn: 365401
      c23da482
    • Stella Stamenova's avatar
      [lldb, windows] When StartMonitoring fails, return a proper error · 7f843e22
      Stella Stamenova authored
      This is possible now that the function returns an llvm::Expected
      
      llvm-svn: 365400
      7f843e22
    • Rainer Orth's avatar
      [Sanitizers] Remove clang_rt.sancov_{begin,end} on Solaris · 40f159cc
      Rainer Orth authored
      There's no point to manually create the __start___sancov_guards and __stop___sancov_guards
      sections and labels on Solaris any longer.  They were originally introduced in
      https://reviews.llvm.org/D40899 and https://reviews.llvm.org/D40903.
      
      - The Solaris 11.4 ld supports creating them out of the box.
      - We already unconditionally use Solaris 11.4 features like the ld -z gnu-version-script-compat option and fully working .preinit_array support in compiler-rt.
      - The current files don't assemble on SPARC because the assembler syntax may be different between /bin/as and GNU as.
      
      Tested on amd64-pc-solaris2.11.
      
      Differential Revision: https://reviews.llvm.org/D63601
      
      llvm-svn: 365399
      40f159cc
    • Matt Arsenault's avatar
      AMDGPU: Split extload/zextload local load patterns · 9e7cbc0e
      Matt Arsenault authored
      This will help removing the custom load predicates, allowing the
      global isel emitter to handle them.
      
      llvm-svn: 365398
      9e7cbc0e
    • Bill Wendling's avatar
      Add parentheses to silence warnings. · 858e3516
      Bill Wendling authored
      llvm-svn: 365397
      858e3516
    • Rainer Orth's avatar
      [Sanitizers] Don't use clang_rt.sancov_{begin,end} on Solaris · 025e44f2
      Rainer Orth authored
      As explained in https://reviews.llvm.org/D63601, there's no point using clang_rt.sancov_{begin,end}
      on Solaris any longer.
      
      This companion patch to the above removes their use from the driver.
      
      Tested on amd64-pc-solaris2.11
      
      Differential Revision: https://reviews.llvm.org/D63602
      
      llvm-svn: 365396
      025e44f2
    • Bill Wendling's avatar
      Add parentheses to silence warnings. · b9816f67
      Bill Wendling authored
      llvm-svn: 365395
      b9816f67
    • Bill Wendling's avatar
      Add parentheses to silence warning. · c8933c40
      Bill Wendling authored
      llvm-svn: 365394
      c8933c40
    • Reid Kleckner's avatar
      Revert [Sema] Resolve placeholder types before type deduction to silence... · 345708b6
      Reid Kleckner authored
      Revert [Sema] Resolve placeholder types before type deduction to silence spurious `-Warc-repeated-use-of-weak` warnings
      
      This reverts r365382 (git commit 8b1becf2)
      
      Appears to regress this semi-reduced fragment of valid code from windows
      SDK headers:
      
        #define InterlockedIncrement64 _InterlockedIncrement64
        extern "C" __int64 InterlockedIncrement64(__int64 volatile *Addend);
        #pragma intrinsic(_InterlockedIncrement64)
        unsigned __int64 InterlockedIncrement(unsigned __int64 volatile *Addend) {
          return (unsigned __int64)(InterlockedIncrement64)((volatile __int64 *)Addend);
        }
      
      Found on a buildbot here, but no mail was sent due to it already being
      red:
      http://lab.llvm.org:8011/builders/sanitizer-windows/builds/48067
      
      llvm-svn: 365393
      345708b6
    • Jonas Devlieghere's avatar
      Remove install-headers · a5ede318
      Jonas Devlieghere authored
      After discussing this internally, it is my understanding this was used
      for building LLDB internally at Apple, and is no longer used or
      necessary.
      
      llvm-svn: 365392
      a5ede318
    • Jonas Devlieghere's avatar
      Remove lldb-perf · cbdf7948
      Jonas Devlieghere authored
      As discussed offline, this tool is no longer used or maintained, and
      doesn't provide the right abstraction for performance tracking in lldb.
      
      Differential revision: https://reviews.llvm.org/D64362
      
      llvm-svn: 365391
      cbdf7948
    • Jonas Devlieghere's avatar
      [Windows] Convert GetLastError to std::error_code · 39d1f2f5
      Jonas Devlieghere authored
      Create a std::error_code from the result of GetLastError, which in turn
      we can use to return an llvm::Error.
      
      llvm-svn: 365390
      39d1f2f5
    • Stella Stamenova's avatar
      [lldb] Fix two more issues in Windows following rL365226: Change LaunchThread... · 05590baa
      Stella Stamenova authored
      [lldb] Fix two more issues in Windows following rL365226: Change LaunchThread interface to return an expected
      
      A couple of the function signatures changed and they were not updated in the Windows HostProcess
      
      llvm-svn: 365388
      05590baa
    • Reid Kleckner's avatar
      Standardize on MSVC behavior for triples with no environment · 2f07c2e9
      Reid Kleckner authored
      Summary:
      This makes it so that IR files using triples without an environment work
      out of the box, without normalizing them.
      
      Typically, the MSVC behavior is more desirable. For example, it tends to
      enable things like constant merging, use of associative comdats, etc.
      
      Addresses PR42491
      
      Reviewers: compnerd
      
      Subscribers: hiraditya, dexonsmith, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D64109
      
      llvm-svn: 365387
      2f07c2e9