brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · 6b2a6e6 Raw
106 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s3 4; This test has an instruction that gets sunk into the loop, that is a5; active.lane.mask operand. (%exitcount.ptrcnt.to.int = ptrtoint). We6; need to make sure it is loop invariant.7 8define i32 @a(ptr readnone %b, ptr %c) {9; CHECK-LABEL: a:10; CHECK:       @ %bb.0: @ %entry11; CHECK-NEXT:    .save {r4, lr}12; CHECK-NEXT:    push {r4, lr}13; CHECK-NEXT:    cmp r0, r114; CHECK-NEXT:    it ls15; CHECK-NEXT:    popls {r4, pc}16; CHECK-NEXT:  .LBB0_1: @ %while.body.preheader17; CHECK-NEXT:    subs r4, r0, r118; CHECK-NEXT:    movs r2, #019; CHECK-NEXT:    mov r3, r120; CHECK-NEXT:    dlstp.8 lr, r421; CHECK-NEXT:  .LBB0_2: @ %vector.body22; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=123; CHECK-NEXT:    adds r0, r1, r224; CHECK-NEXT:    vidup.u8 q0, r0, #125; CHECK-NEXT:    adds r2, #1626; CHECK-NEXT:    vstrb.8 q0, [r3], #1627; CHECK-NEXT:    letp lr, .LBB0_228; CHECK-NEXT:  @ %bb.3: @ %while.end29; CHECK-NEXT:    pop {r4, pc}30entry:31  %cmp3 = icmp ugt ptr %b, %c32  br i1 %cmp3, label %while.body.preheader, label %while.end33 34while.body.preheader:                             ; preds = %entry35  %c5 = ptrtoint ptr %c to i3236  %0 = sub i32 0, %c537  %uglygep = getelementptr i8, ptr %b, i32 %038  %exitcount.ptrcnt.to.int = ptrtoint ptr %uglygep to i3239  %n.rnd.up = add i32 %exitcount.ptrcnt.to.int, 1540  %n.vec = and i32 %n.rnd.up, -1641  br label %vector.body42 43vector.body:                                      ; preds = %vector.body, %while.body.preheader44  %index = phi i32 [ 0, %while.body.preheader ], [ %index.next, %vector.body ]45  %next.gep = getelementptr i8, ptr %c, i32 %index46  %1 = or disjoint i32 %index, 147  %next.gep7 = getelementptr i8, ptr %c, i32 %148  %2 = or disjoint i32 %index, 249  %next.gep8 = getelementptr i8, ptr %c, i32 %250  %3 = or disjoint i32 %index, 351  %next.gep9 = getelementptr i8, ptr %c, i32 %352  %4 = or disjoint i32 %index, 453  %next.gep10 = getelementptr i8, ptr %c, i32 %454  %5 = or disjoint i32 %index, 555  %next.gep11 = getelementptr i8, ptr %c, i32 %556  %6 = or disjoint i32 %index, 657  %next.gep12 = getelementptr i8, ptr %c, i32 %658  %7 = or disjoint i32 %index, 759  %next.gep13 = getelementptr i8, ptr %c, i32 %760  %8 = or disjoint i32 %index, 861  %next.gep14 = getelementptr i8, ptr %c, i32 %862  %9 = or disjoint i32 %index, 963  %next.gep15 = getelementptr i8, ptr %c, i32 %964  %10 = or disjoint i32 %index, 1065  %next.gep16 = getelementptr i8, ptr %c, i32 %1066  %11 = or disjoint i32 %index, 1167  %next.gep17 = getelementptr i8, ptr %c, i32 %1168  %12 = or disjoint i32 %index, 1269  %next.gep18 = getelementptr i8, ptr %c, i32 %1270  %13 = or disjoint i32 %index, 1371  %next.gep19 = getelementptr i8, ptr %c, i32 %1372  %14 = or disjoint i32 %index, 1473  %next.gep20 = getelementptr i8, ptr %c, i32 %1474  %15 = or disjoint i32 %index, 1575  %next.gep21 = getelementptr i8, ptr %c, i32 %1576  %16 = insertelement <16 x ptr> poison, ptr %next.gep, i32 077  %17 = insertelement <16 x ptr> %16, ptr %next.gep7, i32 178  %18 = insertelement <16 x ptr> %17, ptr %next.gep8, i32 279  %19 = insertelement <16 x ptr> %18, ptr %next.gep9, i32 380  %20 = insertelement <16 x ptr> %19, ptr %next.gep10, i32 481  %21 = insertelement <16 x ptr> %20, ptr %next.gep11, i32 582  %22 = insertelement <16 x ptr> %21, ptr %next.gep12, i32 683  %23 = insertelement <16 x ptr> %22, ptr %next.gep13, i32 784  %24 = insertelement <16 x ptr> %23, ptr %next.gep14, i32 885  %25 = insertelement <16 x ptr> %24, ptr %next.gep15, i32 986  %26 = insertelement <16 x ptr> %25, ptr %next.gep16, i32 1087  %27 = insertelement <16 x ptr> %26, ptr %next.gep17, i32 1188  %28 = insertelement <16 x ptr> %27, ptr %next.gep18, i32 1289  %29 = insertelement <16 x ptr> %28, ptr %next.gep19, i32 1390  %30 = insertelement <16 x ptr> %29, ptr %next.gep20, i32 1491  %31 = insertelement <16 x ptr> %30, ptr %next.gep21, i32 1592  %active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 %index, i32 %exitcount.ptrcnt.to.int)93  %32 = ptrtoint <16 x ptr> %31 to <16 x i32>94  %33 = trunc <16 x i32> %32 to <16 x i8>95  call void @llvm.masked.store.v16i8.p0(<16 x i8> %33, ptr %next.gep, i32 1, <16 x i1> %active.lane.mask)96  %index.next = add i32 %index, 1697  %34 = icmp eq i32 %index.next, %n.vec98  br i1 %34, label %while.end, label %vector.body99 100while.end:                                        ; preds = %vector.body, %entry101  ret i32 undef102}103 104declare <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32, i32)105declare void @llvm.masked.store.v16i8.p0(<16 x i8>, ptr, i32 immarg, <16 x i1>)106