112 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc < %s -mtriple=aarch64 | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc < %s -mtriple=aarch64 -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5define i1 @load_bv_v4i8(i1 zeroext %a) {6; CHECK-LABEL: load_bv_v4i8:7; CHECK: // %bb.0:8; CHECK-NEXT: ret9 %b = zext i1 %a to i3210 %c = icmp eq i32 %b, 111 ret i1 %c12}13 14define noundef i1 @logger(i32 noundef %logLevel, ptr %ea, ptr %pll) {15; CHECK-SD-LABEL: logger:16; CHECK-SD: // %bb.0: // %entry17; CHECK-SD-NEXT: ldr w8, [x2]18; CHECK-SD-NEXT: cmp w8, w019; CHECK-SD-NEXT: b.ls .LBB1_220; CHECK-SD-NEXT: // %bb.1:21; CHECK-SD-NEXT: mov w0, wzr22; CHECK-SD-NEXT: ret23; CHECK-SD-NEXT: .LBB1_2: // %land.rhs24; CHECK-SD-NEXT: ldr x8, [x1]25; CHECK-SD-NEXT: ldrb w0, [x8]26; CHECK-SD-NEXT: ret27;28; CHECK-GI-LABEL: logger:29; CHECK-GI: // %bb.0: // %entry30; CHECK-GI-NEXT: ldr w8, [x2]31; CHECK-GI-NEXT: cmp w8, w032; CHECK-GI-NEXT: mov w0, wzr33; CHECK-GI-NEXT: b.hi .LBB1_234; CHECK-GI-NEXT: // %bb.1: // %land.rhs35; CHECK-GI-NEXT: ldr x8, [x1]36; CHECK-GI-NEXT: ldrb w0, [x8]37; CHECK-GI-NEXT: .LBB1_2: // %land.end38; CHECK-GI-NEXT: ret39entry:40 %0 = load i32, ptr %pll, align 441 %cmp.not = icmp ugt i32 %0, %logLevel42 br i1 %cmp.not, label %land.end, label %land.rhs43 44land.rhs: ; preds = %entry45 %1 = load ptr, ptr %ea, align 846 %2 = load i8, ptr %1, align 1, !range !14, !noundef !1547 %tobool.i = icmp ne i8 %2, 048 br label %land.end49 50land.end: ; preds = %land.rhs, %entry51 %3 = phi i1 [ false, %entry ], [ %tobool.i, %land.rhs ]52 ret i1 %353}54!14 = !{i8 0, i8 2}55!15 = !{}56 57 58declare i64 @llvm.ctlz.i64(i64 %in, i1)59define i1 @lshr_ctlz_undef_cmpeq_one_i64(i64 %in) {60; CHECK-SD-LABEL: lshr_ctlz_undef_cmpeq_one_i64:61; CHECK-SD: // %bb.0:62; CHECK-SD-NEXT: clz x8, x063; CHECK-SD-NEXT: lsr x0, x8, #664; CHECK-SD-NEXT: // kill: def $w0 killed $w0 killed $x065; CHECK-SD-NEXT: ret66;67; CHECK-GI-LABEL: lshr_ctlz_undef_cmpeq_one_i64:68; CHECK-GI: // %bb.0:69; CHECK-GI-NEXT: clz x8, x070; CHECK-GI-NEXT: lsr w0, w8, #671; CHECK-GI-NEXT: ret72 %ctlz = call i64 @llvm.ctlz.i64(i64 %in, i1 -1)73 %lshr = lshr i64 %ctlz, 674 %icmp = icmp eq i64 %lshr, 175 ret i1 %icmp76}77 78define i32 @PR17487(i1 %tobool) {79; CHECK-SD-LABEL: PR17487:80; CHECK-SD: // %bb.0:81; CHECK-SD-NEXT: dup v0.2s, w082; CHECK-SD-NEXT: mov w8, #1 // =0x183; CHECK-SD-NEXT: dup v1.2d, x884; CHECK-SD-NEXT: ushll v0.2d, v0.2s, #085; CHECK-SD-NEXT: bic v0.16b, v1.16b, v0.16b86; CHECK-SD-NEXT: mov x8, v0.d[1]87; CHECK-SD-NEXT: cmp x8, #188; CHECK-SD-NEXT: cset w0, ne89; CHECK-SD-NEXT: ret90;91; CHECK-GI-LABEL: PR17487:92; CHECK-GI: // %bb.0:93; CHECK-GI-NEXT: // kill: def $w0 killed $w0 def $x094; CHECK-GI-NEXT: mov v0.d[1], x095; CHECK-GI-NEXT: adrp x8, .LCPI3_096; CHECK-GI-NEXT: ldr q1, [x8, :lo12:.LCPI3_0]97; CHECK-GI-NEXT: bic v0.16b, v1.16b, v0.16b98; CHECK-GI-NEXT: mov d0, v0.d[1]99; CHECK-GI-NEXT: fmov x8, d0100; CHECK-GI-NEXT: cmp x8, #1101; CHECK-GI-NEXT: cset w0, ne102; CHECK-GI-NEXT: ret103 %tmp = insertelement <2 x i1> undef, i1 %tobool, i32 1104 %tmp1 = zext <2 x i1> %tmp to <2 x i64>105 %tmp2 = xor <2 x i64> %tmp1, <i64 1, i64 1>106 %tmp3 = extractelement <2 x i64> %tmp2, i32 1107 %add = add nsw i64 0, %tmp3108 %cmp6 = icmp ne i64 %add, 1109 %conv7 = zext i1 %cmp6 to i32110 ret i32 %conv7111}112