Started 12 days ago
Took 5 hr 7 min on green-dragon-02

Failed Build #14360 (Jul 8, 2019 8:43:25 PM)

  • : 365433
  • : 365414
  • : 365424
  • : 365385
  • : 365359
  • : 365380
  1. [NFC][PowerPC] Fixed unused variable 'NewInstr'. (detail)
    by lkail
  2. [AMDGPU] Added td definitions for HW regs

    Infrastructure work for future commit. NFC.

    Differential Revision: (detail)
    by rampitec
  3. [AMDGPU] Always use s_memtime for readcyclecounter

    Differential Revision: (detail)
    by rampitec
  4. [PowerPC][Peephole] Combine extsw and sldi after instruction selection

    `extsw` and `sldi` are supposed to be combined if they are in the same
    BB in instruction selection phase. This patch handles the case where
    extsw and sldi are not in the same BB.

    Differential Revision: (detail)
    by lkail
  5. [PowerPC][NFC] remove redundant function isVFReg(). (detail)
    by shchenz
  6. [MachinePipeliner] Fix Phi refers to Phi in same stage in 1st epilogue

    This is exposed by functional testing on PowerPC.
    In some pipelined loops, Phi refer to phi did not get value defined by
    the Phi, hence getting wrong value later.

    As the comment mentioned, we should "use the value defined by the Phi,
    unless we're generating the firstepilog and the Phi refers to a Phi
    in a different stage.", so Phi refering to same stage Phi should use
    the value defined by the Phi here.

    Reviewers: bcahoon, hfinkel

    Reviewed By: hfinkel

    Subscribers: MaskRay, wuzish, nemanjai, hiraditya, llvm-commits

    Tags: #llvm

    Differential Revision: (detail)
    by jsji
  7. [PowerPC][MachinePipeliner][NFC] Add a testcase for Phi bug. (detail)
    by jsji
  8. [WebAssembly] Make sret parameter work with AddMissingPrototypes

    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: (detail)
    by aheejin
  9. [LoopPred] Stylistic improvement to recently added NE/EQ normalization [NFC] (detail)
    by reames
  10. [sanitizers][windows] FIX: Rtl-Heap Interception and tests

       - 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 (detail)
    by mcgov
  11. [BPF] add new intrinsics preserve_{array,union,struct}_access_index

    For background of BPF CO-RE project, please refer to
    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)
      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: Yonghong Song <>

    Differential Revision: (detail)
    by yhs

Started by timer (2 times)

This run spent:

  • 1 hr 32 min waiting;
  • 5 hr 7 min build duration;
  • 6 hr 40 min total from scheduled to completion.
Test Result (5 failures / ±0)Show all failed tests >>>

Identified problems

Regression test failed

This build failed because a regression test in the test suite FAILed. See the test report for details.
Indication 1

Unexpected pass

This buildbot failed because a test marked as XFAIL unexpectedly passes. This could mean that the cause for the XFAIL is fixed, but it warrants investigation in any case.
Indication 2