Skip to content
  1. Jan 16, 2019
  2. Jan 15, 2019
    • Peter Collingbourne's avatar
      compiler-rt/test: Bring back -pie on Android. · f12c754b
      Peter Collingbourne authored
      Looks like the sanitizer-x86_64-linux-android bot started failing
      because -pie is still needed when targeting API levels < 16 (which
      is the case by default for arm and i686).
      
      llvm-svn: 351270
      f12c754b
    • Stephen Kelly's avatar
      Re-order overrides in FunctionDecl dump · 42d99500
      Stephen Kelly authored
      Output all content which is local to the FunctionDecl before traversing
      to child AST nodes.
      
      This is necessary so that all of the part which is local to the
      FunctionDecl can be split into a different method.
      
      Reviewers: aaron.ballman
      
      Differential Revision: https://reviews.llvm.org/D55083
      
      llvm-svn: 351269
      42d99500
    • Stephen Kelly's avatar
      NFC: Replace iterator loop with cxx_range_for · b4189377
      Stephen Kelly authored
      llvm-svn: 351268
      b4189377
    • Jonas Devlieghere's avatar
      [VFS] Add getter for mapping entries. · 7a168627
      Jonas Devlieghere authored
      When generating a reproducer in LLDB we build up the mapping but don't
      immediately copy over the files on the file system.
      
      Rather than keeping a separate data structure with real and virtual
      paths, we might as well reuse the entries already stored in the
      YAMLVFSWriter to lazily copy over the files when needed.
      
      llvm-svn: 351266
      7a168627
    • Jonas Devlieghere's avatar
      [VFS] Move RedirectingFileSystem interface into header (NFC) · 1a0ce65a
      Jonas Devlieghere authored
      This moves the RedirectingFileSystem into the header so it can be
      extended. This is needed in LLDB we need a way to obtain the external
      path to deal with FILE* and file descriptor APIs.
      
      Discussion on the mailing list:
      http://lists.llvm.org/pipermail/llvm-dev/2018-November/127755.html
      
      Differential revision: https://reviews.llvm.org/D54277
      
      llvm-svn: 351265
      1a0ce65a
    • Adrian Prantl's avatar
      Simplify code by using Optional::getValueOr() · 222474b9
      Adrian Prantl authored
      llvm-svn: 351264
      222474b9
    • Alex Langford's avatar
      [debugserver][CMake] Remove commented out line · 76cb3089
      Alex Langford authored
      This has been commented out since rL300111
      (commit d742d081f3a1e7412cc609765139ba32d597ac15). Looks like it was
      committed as a commented out line, so I'm removing it.
      
      llvm-svn: 351263
      76cb3089
    • Jonathan Metzman's avatar
      [libFuzzer] Remove unstable edge handling · 9e14cccf
      Jonathan Metzman authored
      Summary:
      Remove code for handling unstable edges from libFuzzer since
      it has not been found useful.
      
      Differential Revision: https://reviews.llvm.org/D56730
      
      llvm-svn: 351262
      9e14cccf
    • Paul Hoad's avatar
      [clang-tidy] add options documentation to readability-identifier-naming checker · b16e288c
      Paul Hoad authored
      Summary:
      The documentation for this clang-checker did not explain what the options are. But this checkers only works with at least some options defined.
      
      To discover the options, you have to read the source code. This shouldn't be necessary for users who just have access to the clang-tidy binary.
      
      This revision, explains the options and gives an example.
      
      Patch by MyDeveloperDay.
      
      Reviewers: JonasToth, Eugene.Zelenko
      
      Reviewed By: JonasToth
      
      Subscribers: xazax.hun, Eugene.Zelenko
      
      Differential Revision: https://reviews.llvm.org/D56563
      
      llvm-svn: 351261
      b16e288c
    • Peter Collingbourne's avatar
      compiler-rt/test: Add a couple of convenience features for Android. · 6498fbb2
      Peter Collingbourne authored
      Add a ANDROID_SERIAL_FOR_TESTING CMake variable. This lets you
      run the tests with multiple devices attached without having to set
      ANDROID_SERIAL.
      
      Add a mechanism for pushing files to the device. Currently most
      sanitizers require llvm-symbolizer and the sanitizer runtime to
      be pushed to the device. This lets the sanitizer make this happen
      automatically before running the tests by specifying the paths in
      the lit.site.cfg file.
      
      Differential Revision: https://reviews.llvm.org/D56712
      
      llvm-svn: 351260
      6498fbb2
    • Jordan Rupprecht's avatar
      [libObject] Tweak expected error output from llvm-ar · 20a817ea
      Jordan Rupprecht authored
      llvm-svn: 351259
      20a817ea
    • Peter Collingbourne's avatar
    • Rong Xu's avatar
      [profile] Sync up InstrProfData.inc with llvm copy /NFC · 3e9e7fb9
      Rong Xu authored
      llvm-svn: 351257
      3e9e7fb9
    • Jordan Rupprecht's avatar
      [llvm-ar] Resubmit recursive thin archive test with fix for full path names... · 904ce984
      Jordan Rupprecht authored
      [llvm-ar] Resubmit recursive thin archive test with fix for full path names and better error messages
      
      llvm-svn: 351256
      904ce984
    • Peter Collingbourne's avatar
      gn build: Add a resource_dir.gni file. · efe83db7
      Peter Collingbourne authored
      The path to the resource directory will end up being used in several
      more places once the support for running check-hwasan lands. This
      moves the definition to a central location so that it can be used
      from those places.
      
      Differential Revision: https://reviews.llvm.org/D56700
      
      llvm-svn: 351255
      efe83db7
    • Craig Topper's avatar
      [X86] Add the GCCBuiltin name back to the deprecated avx512 gather intrinsics... · b2729b14
      Craig Topper authored
      [X86] Add the GCCBuiltin name back to the deprecated avx512 gather intrinsics until the clang side patch for the new versions is approved.
      
      llvm-svn: 351254
      b2729b14
    • Roman Lebedev's avatar
      X86DAGToDAGISel::matchBitExtract() with truncation (PR36419) · fb4eed38
      Roman Lebedev authored
      Summary:
      Previously in D54095 i have added support for extraction of `lshr` from `X` if we are to produce `BEXTR`.
      That was good, but the fix was partial, there was still [[ https://bugs.llvm.org/show_bug.cgi?id=36419 | PR36419 ]].
      
      That pattern can also appear, roughly, when you have a large (64-bit) storage, and the consume bits from it.
      It will not be unexpected if you will be doing further computations in 32-bit width.
      And then the current code breaks, as the tests show.
      
      The basic idea/pattern here is following:
      1. We have `i64` input
      2. We perform `i64` right-shift on it.
      3. We `trunc`ate that shifted value
      4. We do all further work (masking) in `i32`
      
      Since we see `trunc`ation and not `lshr`, we give up, and stop trying to extract that right-shift.
      BUT. The mask is `i32`, therefore we can extend both of the operands of the masking (`and`) to `i64`
      and truncate the result after masking: https://rise4fun.com/Alive/K4B
      ```
      Name: @bextr64_32_b1 -> @bextr64_32_b0
        %shiftedval = lshr i64 %val, %numskipbits
        %truncshiftedval = trunc i64 %shiftedval to i32
        %widenumlowbits1 = zext i8 %numlowbits to i32
        %notmask1 = shl nsw i32 -1, %widenumlowbits1
        %mask1 = xor i32 %notmask1, -1
        %res = and i32 %truncshiftedval, %mask1
      =>
        %shiftedval = lshr i64 %val, %numskipbits
        %widenumlowbits = zext i8 %numlowbits to i64
        %notmask = shl nsw i64 -1, %widenumlowbits
        %mask = xor i64 %notmask, -1
        %wideres = and i64 %shiftedval, %mask
        %res = trunc i64 %wideres to i32
      ```
      
      Thus, we are again able to extract that `lshr` into `BEXTR`'s control.
      
      Now, the perf (via `llvm-exegesis`) of the snippet suggests that it is not a good idea:
      ```
      $ cat /tmp/old.s
      # bextr64_32_b1
      # LLVM-EXEGESIS-LIVEIN RSI
      # LLVM-EXEGESIS-LIVEIN EDX
      # LLVM-EXEGESIS-LIVEIN RDI
      movq %rsi, %rcx
      shrq %cl, %rdi
      shll $8, %edx
      bextrl %edx, %edi, %eax
      $ cat /tmp/old.s | ./bin/llvm-exegesis -mode=latency -snippets-file=-
      Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-1e0082.o
      ---
      mode:            latency
      key:
        instructions:
          - 'MOV64rr RCX RSI'
          - 'SHR64rCL RDI RDI'
          - 'SHL32ri EDX EDX i_0x8'
          - 'BEXTR32rr EAX EDI EDX'
        config:          ''
        register_initial_values: []
      cpu_name:        bdver2
      llvm_triple:     x86_64-unknown-linux-gnu
      num_repetitions: 10000
      measurements:
        - { key: latency, value: 0.6638, per_snippet_value: 2.6552 }
      error:           ''
      info:            ''
      assembled_snippet: 4889F148D3EFC1E208C4E268F7C74889F148D3EFC1E208C4E268F7C74889F148D3EFC1E208C4E268F7C74889F148D3EFC1E208C4E268F7C7C3
      ...
      $ cat /tmp/old.s | ./bin/llvm-exegesis -mode=uops -snippets-file=-
      Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-43e346.o
      ---
      mode:            uops
      key:
        instructions:
          - 'MOV64rr RCX RSI'
          - 'SHR64rCL RDI RDI'
          - 'SHL32ri EDX EDX i_0x8'
          - 'BEXTR32rr EAX EDI EDX'
        config:          ''
        register_initial_values: []
      cpu_name:        bdver2
      llvm_triple:     x86_64-unknown-linux-gnu
      num_repetitions: 10000
      measurements:
        - { key: PdFPU0, value: 0, per_snippet_value: 0 }
        - { key: PdFPU1, value: 0, per_snippet_value: 0 }
        - { key: PdFPU2, value: 0, per_snippet_value: 0 }
        - { key: PdFPU3, value: 0, per_snippet_value: 0 }
        - { key: NumMicroOps, value: 1.2571, per_snippet_value: 5.0284 }
      error:           ''
      info:            ''
      assembled_snippet: 4889F148D3EFC1E208C4E268F7C74889F148D3EFC1E208C4E268F7C74889F148D3EFC1E208C4E268F7C74889F148D3EFC1E208C4E268F7C7C3
      ...
      ```
      vs
      ```
      $ cat /tmp/new.s
      # bextr64_32_b1
      # LLVM-EXEGESIS-LIVEIN RDX
      # LLVM-EXEGESIS-LIVEIN SIL
      # LLVM-EXEGESIS-LIVEIN RDI
      shlq $8, %rdx
      movzbl %sil, %eax
      orq %rdx, %rax
      bextrq %rax, %rdi, %rax
      $ cat /tmp/new.s | ./bin/llvm-exegesis -mode=latency -snippets-file=-
      Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-8944f1.o
      ---
      mode:            latency
      key:
        instructions:
          - 'SHL64ri RDX RDX i_0x8'
          - 'MOVZX32rr8 EAX SIL'
          - 'OR64rr RAX RAX RDX'
          - 'BEXTR64rr RAX RDI RAX'
        config:          ''
        register_initial_values: []
      cpu_name:        bdver2
      llvm_triple:     x86_64-unknown-linux-gnu
      num_repetitions: 10000
      measurements:
        - { key: latency, value: 0.7454, per_snippet_value: 2.9816 }
      error:           ''
      info:            ''
      assembled_snippet: 48C1E208400FB6C64809D0C4E2F8F7C748C1E208400FB6C64809D0C4E2F8F7C748C1E208400FB6C64809D0C4E2F8F7C748C1E208400FB6C64809D0C4E2F8F7C7C3
      ...
      $ cat /tmp/new.s | ./bin/llvm-exegesis -mode=uops -snippets-file=-
      Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-da403c.o
      ---
      mode:            uops
      key:
        instructions:
          - 'SHL64ri RDX RDX i_0x8'
          - 'MOVZX32rr8 EAX SIL'
          - 'OR64rr RAX RAX RDX'
          - 'BEXTR64rr RAX RDI RAX'
        config:          ''
        register_initial_values: []
      cpu_name:        bdver2
      llvm_triple:     x86_64-unknown-linux-gnu
      num_repetitions: 10000
      measurements:
        - { key: PdFPU0, value: 0, per_snippet_value: 0 }
        - { key: PdFPU1, value: 0, per_snippet_value: 0 }
        - { key: PdFPU2, value: 0, per_snippet_value: 0 }
        - { key: PdFPU3, value: 0, per_snippet_value: 0 }
        - { key: NumMicroOps, value: 1.2571, per_snippet_value: 5.0284 }
      error:           ''
      info:            ''
      assembled_snippet: 48C1E208400FB6C64809D0C4E2F8F7C748C1E208400FB6C64809D0C4E2F8F7C748C1E208400FB6C64809D0C4E2F8F7C748C1E208400FB6C64809D0C4E2F8F7C7C3
      ...
      ```
      ^ latency increased (worse).
      
      Except //maybe// not really.
      Like with all synthetic benchmarks, they //may// be misleading.
      
      Let's take a look on some actual real-world hotpath.
      In this case it's 'my' [[ https://github.com/darktable-org/rawspeed | RawSpeed ]]'s `BitStream<>::peekBitsNoFill()`, in [[ https://github.com/darktable-org/rawspeed/blob/e3316dc85127c2c29baa40f998f198a7b278bf36/src/librawspeed/decompressors/VC5Decompressor.cpp#L814 | GoPro VC5 decompressor ]]:
      ```
      raw.pixls.us-unique/GoPro/HERO6 Black$ /usr/src/googlebenchmark/tools/compare.py -a benchmarks ~/rawspeed/build-clangs1-{old,new}/src/utilities/rsbench/rsbench --benchmark_counters_tabular=true --benchmark_min_time=0.00000001 --benchmark_repetitions=128 GOPR9172.GPR
      RUNNING: /home/lebedevri/rawspeed/build-clangs1-old/src/utilities/rsbench/rsbench --benchmark_counters_tabular=true --benchmark_min_time=0.00000001 --benchmark_repetitions=128 GOPR9172.GPR --benchmark_display_aggregates_only=true --benchmark_out=/tmp/tmplwbKEM
      2018-12-22 21:23:03
      Running /home/lebedevri/rawspeed/build-clangs1-old/src/utilities/rsbench/rsbench
      Run on (8 X 4012.81 MHz CPU s)
      CPU Caches:
        L1 Data 16K (x8)
        L1 Instruction 64K (x4)
        L2 Unified 2048K (x4)
        L3 Unified 8192K (x1)
      Load Average: 3.41, 2.41, 2.03
      -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      Benchmark                                        Time           CPU Iterations  CPUTime,s CPUTime/WallTime     Pixels Pixels/CPUTime Pixels/WallTime Raws/CPUTime Raws/WallTime WallTime,s
      -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      GOPR9172.GPR/threads:8/real_time_mean           40 ms         40 ms        128   0.322244          7.96974        12M       37.4457M        298.534M      3.12047       24.8778   0.040465
      GOPR9172.GPR/threads:8/real_time_median         39 ms         39 ms        128   0.312606          7.99155        12M        38.387M        306.788M      3.19891       25.5656   0.039115
      GOPR9172.GPR/threads:8/real_time_stddev          4 ms          3 ms        128  0.0271557         0.130575          0        2.4941M        21.3909M     0.207842       1.78257   3.81081m
      RUNNING: /home/lebedevri/rawspeed/build-clangs1-new/src/utilities/rsbench/rsbench --benchmark_counters_tabular=true --benchmark_min_time=0.00000001 --benchmark_repetitions=128 GOPR9172.GPR --benchmark_display_aggregates_only=true --benchmark_out=/tmp/tmpWAkan9
      2018-12-22 21:23:08
      Running /home/lebedevri/rawspeed/build-clangs1-new/src/utilities/rsbench/rsbench
      Run on (8 X 4013.1 MHz CPU s)
      CPU Caches:
        L1 Data 16K (x8)
        L1 Instruction 64K (x4)
        L2 Unified 2048K (x4)
        L3 Unified 8192K (x1)
      Load Average: 3.78, 2.50, 2.06
      -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      Benchmark                                        Time           CPU Iterations  CPUTime,s CPUTime/WallTime     Pixels Pixels/CPUTime Pixels/WallTime Raws/CPUTime Raws/WallTime WallTime,s
      -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      GOPR9172.GPR/threads:8/real_time_mean           39 ms         39 ms        128   0.311533          7.97323        12M       38.6828M        308.471M      3.22356        25.706  0.0390928
      GOPR9172.GPR/threads:8/real_time_median         38 ms         38 ms        128   0.304231          7.99005        12M       39.4437M        315.527M      3.28698        26.294  0.0380316
      GOPR9172.GPR/threads:8/real_time_stddev          3 ms          3 ms        128  0.0229149         0.133814          0       2.26225M        19.1421M     0.188521       1.59517   3.13671m
      Comparing /home/lebedevri/rawspeed/build-clangs1-old/src/utilities/rsbench/rsbench to /home/lebedevri/rawspeed/build-clangs1-new/src/utilities/rsbench/rsbench
      Benchmark                                                 Time             CPU      Time Old      Time New       CPU Old       CPU New
      --------------------------------------------------------------------------------------------------------------------------------------
      GOPR9172.GPR/threads:8/real_time_pvalue                 0.0000          0.0000      U Test, Repetitions: 128 vs 128
      GOPR9172.GPR/threads:8/real_time_mean                  -0.0339         -0.0316            40            39            40            39
      GOPR9172.GPR/threads:8/real_time_median                -0.0277         -0.0274            39            38            39            38
      GOPR9172.GPR/threads:8/real_time_stddev                -0.1769         -0.1267             4             3             3             3
      ```
      I.e. this results in //roughly// -3% improvements in perf.
      
      While this will help [[ https://bugs.llvm.org/show_bug.cgi?id=36419 | PR36419 ]], it won't address it fully.
      
      Reviewers: RKSimon, craig.topper, andreadb, spatel
      
      Reviewed By: craig.topper
      
      Subscribers: courbet, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D56052
      
      llvm-svn: 351253
      fb4eed38
    • Peter Collingbourne's avatar
      compiler-rt/test: Clean up Android specific workarounds in lit.common.cfg. · f6627ce8
      Peter Collingbourne authored
      -pie -Wl,--enable-new-dtags are no longer needed because
      the driver passes them by default as of r316606.
      
      Prepend -fuse-ld=gold instead of appending it so that the linker can
      be overridden using COMPILER_RT_TEST_COMPILER_CFLAGS.
      
      Differential Revision: https://reviews.llvm.org/D56697
      
      llvm-svn: 351252
      f6627ce8
    • David Callahan's avatar
      treat invoke like call · d129d3e9
      David Callahan authored
      Summary:
      InvokeInst should be treated like CallInst and
      assigned a separate discriminator. This is particularly
      import when an Invoke is converted to a Call
      during compilation and so can invalidate sample profile
      data collected wtih different link time optimizations
      
      Reviewers: twoh, Kader, danielcdh, wmi
      
      Reviewed By: wmi
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D56491
      
      llvm-svn: 351251
      d129d3e9
    • Adrian Prantl's avatar
      Simplify Value::GetValueByteSize() · 5b73c9bf
      Adrian Prantl authored
      llvm-svn: 351250
      5b73c9bf
    • Reid Kleckner's avatar
      [clang-cl] Alias /Zc:alignedNew[-] to -f[no-]aligned-allocation · ede93da6
      Reid Kleckner authored
      Implements PR40180.
      
      clang-cl has one minor behavior difference with cl with this change.
      Clang allows the user to enable the C++17 feature of aligned allocation
      without enabling all of C++17, but MSVC will not call the aligned
      allocation overloads unless -std:c++17 is passed. While our behavior is
      technically incompatible, it would require making driver mode specific
      changes to match MSVC precisely, and clang's behavior is useful because
      it allows people to experiment with new C++17 features individually.
      Therefore, I plan to leave it as is.
      
      llvm-svn: 351249
      ede93da6
    • Peter Collingbourne's avatar
      gn build: Move target flags from toolchain to a .gni file. · e6b1a341
      Peter Collingbourne authored
      While here, add a use_lld flag and default it to true when using
      clang on non-mac.
      
      Differential Revision: https://reviews.llvm.org/D56710
      
      llvm-svn: 351248
      e6b1a341
    • Matt Morehouse's avatar
      [SanitizerCoverage] Don't create comdat for interposable functions. · 19ff35c4
      Matt Morehouse authored
      Summary:
      Comdat groups override weak symbol behavior, allowing the linker to keep
      the comdats for weak symbols in favor of comdats for strong symbols.
      
      Fixes the issue described in:
      https://bugs.chromium.org/p/chromium/issues/detail?id=918662
      
      Reviewers: eugenis, pcc, rnk
      
      Reviewed By: pcc, rnk
      
      Subscribers: smeenai, rnk, bd1976llvm, hiraditya, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D56516
      
      llvm-svn: 351247
      19ff35c4
    • Peter Collingbourne's avatar
      gn build: Add build files for compiler-rt/lib/{hwasan,interception,sanitizer_common,ubsan}. · 4a22fb18
      Peter Collingbourne authored
      This allows the hwasan runtime to be built for Android aarch64.
      
      Differential Revision: https://reviews.llvm.org/D56628
      
      llvm-svn: 351246
      4a22fb18
    • Brad Smith's avatar
      Enable IAS for OpenBSD SPARC. · 674ad9b9
      Brad Smith authored
      llvm-svn: 351245
      674ad9b9
    • Adrian Prantl's avatar
      Simplify code · 2f1fa7a0
      Adrian Prantl authored
      llvm-svn: 351244
      2f1fa7a0
    • Adrian Prantl's avatar
      Add Doxygen comments. · bb2a2c53
      Adrian Prantl authored
      llvm-svn: 351243
      bb2a2c53
    • Peter Collingbourne's avatar
      gn build: Merge r351216, r351228. · 907ea9f1
      Peter Collingbourne authored
      llvm-svn: 351242
      907ea9f1
Loading