brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 43d49da Raw
148 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: opt -mtriple=aarch64-linux-gnu -passes=typepromotion < %s | llc -mtriple=aarch64-linux-gnu -o - | FileCheck %s3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5 6%struct.bar = type { %struct.foo }7%struct.foo = type { ptr }8%struct.wobble = type { ptr }9%struct.zot = type <{ %struct.wobble, ptr, ptr, i8, [7 x i8] }>10 11@global = external global %struct.bar, align 812 13define i64 @bfis_in_loop_zero() {14; CHECK-LABEL: bfis_in_loop_zero:15; CHECK:       // %bb.0: // %entry16; CHECK-NEXT:    adrp x9, :got:global17; CHECK-NEXT:    mov x0, xzr18; CHECK-NEXT:    mov w8, wzr19; CHECK-NEXT:    ldr x9, [x9, :got_lo12:global]20; CHECK-NEXT:    mov w10, #65536 // =0x1000021; CHECK-NEXT:    ldr x9, [x9]22; CHECK-NEXT:  .LBB0_1: // %midblock23; CHECK-NEXT:    // =>This Inner Loop Header: Depth=124; CHECK-NEXT:    ldrh w11, [x9, #72]25; CHECK-NEXT:    and x13, x0, #0xffffffff0000000026; CHECK-NEXT:    lsr w12, w11, #827; CHECK-NEXT:    cmp w11, #028; CHECK-NEXT:    csel w8, w8, w12, eq29; CHECK-NEXT:    ldr x12, [x9, #8]30; CHECK-NEXT:    csel x9, xzr, x10, eq31; CHECK-NEXT:    bfi w11, w8, #8, #2432; CHECK-NEXT:    orr x13, x9, x1333; CHECK-NEXT:    ldr x9, [x12, #16]34; CHECK-NEXT:    orr x0, x13, x1135; CHECK-NEXT:    cbnz x12, .LBB0_136; CHECK-NEXT:  // %bb.2: // %exit37; CHECK-NEXT:    ret38entry:39  %var = load ptr, ptr @global, align 840  br label %preheader41 42preheader:43  br label %header44 45header:                                              ; preds = %bb63, %bb46  %var4 = phi i64 [ %var30, %latch ], [ 0, %preheader ]47  %var5 = phi ptr [ %var38, %latch ], [ %var, %preheader ]48  %var6 = phi i8 [ %var21, %latch ], [ 0, %preheader ]49  br label %midblock50 51midblock:                                             ; preds = %bb952  %var15 = getelementptr inbounds %struct.wobble, ptr %var5, i64 953  %var17 = load i16, ptr %var15, align 854  %var18 = icmp eq i16 %var17, 055  %var19 = lshr i16 %var17, 856  %var20 = trunc i16 %var19 to i857  %var21 = select i1 %var18, i8 %var6, i8 %var2058  %var22 = zext i8 %var21 to i1659  %var23 = shl nuw i16 %var22, 860  %var24 = and i16 %var17, 25561  %var25 = or i16 %var23, %var2462  %var26 = select i1 %var18, i64 0, i64 6553663  %var27 = zext i16 %var25 to i6464  %var28 = and i64 %var4, -429496729665  %var29 = or i64 %var26, %var2866  %var30 = or i64 %var29, %var2767  br label %latch68 69latch:                                             ; preds = %bb14, %bb970  %var34 = getelementptr inbounds %struct.wobble, ptr %var5, i64 1, i32 071  %var35 = load ptr, ptr %var34, align 872  %var36 = icmp eq ptr %var35, null73  %var37 = getelementptr inbounds %struct.zot, ptr %var35, i64 0, i32 274  %var38 = load ptr, ptr %var37, align 875  br i1 %var36, label %exit, label %header76 77exit:78  ret i64 %var3079}80 81define i64 @bfis_in_loop_undef() {82; CHECK-LABEL: bfis_in_loop_undef:83; CHECK:       // %bb.0: // %entry84; CHECK-NEXT:    adrp x9, :got:global85; CHECK-NEXT:    mov w8, wzr86; CHECK-NEXT:    // implicit-def: $x087; CHECK-NEXT:    ldr x9, [x9, :got_lo12:global]88; CHECK-NEXT:    ldr x10, [x9]89; CHECK-NEXT:    mov w9, #65536 // =0x1000090; CHECK-NEXT:  .LBB1_1: // %midblock91; CHECK-NEXT:    // =>This Inner Loop Header: Depth=192; CHECK-NEXT:    ldrh w11, [x10, #72]93; CHECK-NEXT:    and x13, x0, #0xffffffff0000000094; CHECK-NEXT:    lsr w12, w11, #895; CHECK-NEXT:    cmp w11, #096; CHECK-NEXT:    csel w8, w8, w12, eq97; CHECK-NEXT:    ldr x12, [x10, #8]98; CHECK-NEXT:    csel x10, xzr, x9, eq99; CHECK-NEXT:    bfi w11, w8, #8, #24100; CHECK-NEXT:    orr x13, x10, x13101; CHECK-NEXT:    ldr x10, [x12, #16]102; CHECK-NEXT:    orr x0, x13, x11103; CHECK-NEXT:    cbnz x12, .LBB1_1104; CHECK-NEXT:  // %bb.2: // %exit105; CHECK-NEXT:    ret106entry:107  %var = load ptr, ptr @global, align 8108  br label %preheader109 110preheader:111  br label %header112 113header:                                              ; preds = %bb63, %bb114  %var4 = phi i64 [ %var30, %latch ], [ undef, %preheader ]115  %var5 = phi ptr [ %var38, %latch ], [ %var, %preheader ]116  %var6 = phi i8 [ %var21, %latch ], [ undef, %preheader ]117  br label %midblock118 119midblock:                                             ; preds = %bb9120  %var15 = getelementptr inbounds %struct.wobble, ptr %var5, i64 9121  %var17 = load i16, ptr %var15, align 8122  %var18 = icmp eq i16 %var17, 0123  %var19 = lshr i16 %var17, 8124  %var20 = trunc i16 %var19 to i8125  %var21 = select i1 %var18, i8 %var6, i8 %var20126  %var22 = zext i8 %var21 to i16127  %var23 = shl nuw i16 %var22, 8128  %var24 = and i16 %var17, 255129  %var25 = or i16 %var23, %var24130  %var26 = select i1 %var18, i64 0, i64 65536131  %var27 = zext i16 %var25 to i64132  %var28 = and i64 %var4, -4294967296133  %var29 = or i64 %var26, %var28134  %var30 = or i64 %var29, %var27135  br label %latch136 137latch:                                             ; preds = %bb14, %bb9138  %var34 = getelementptr inbounds %struct.wobble, ptr %var5, i64 1, i32 0139  %var35 = load ptr, ptr %var34, align 8140  %var36 = icmp eq ptr %var35, null141  %var37 = getelementptr inbounds %struct.zot, ptr %var35, i64 0, i32 2142  %var38 = load ptr, ptr %var37, align 8143  br i1 %var36, label %exit, label %header144 145exit:146  ret i64 %var30147}148