80 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=aarch64-none-linux-gnu | FileCheck %s3 4; and can be eliminated5define i32 @test_call_known_max_range() #0 {6; CHECK-LABEL: test_call_known_max_range:7; CHECK: // %bb.0: // %entry8; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill9; CHECK-NEXT: bl foo10; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload11; CHECK-NEXT: ret12entry:13 %id = tail call i32 @foo(), !range !0, !noundef !{}14 %and = and i32 %id, 102315 ret i32 %and16}17 18define i32 @test_call_known_trunc_1_bit_range() #0 {19; CHECK-LABEL: test_call_known_trunc_1_bit_range:20; CHECK: // %bb.0: // %entry21; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill22; CHECK-NEXT: bl foo23; CHECK-NEXT: and w0, w0, #0x1ff24; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload25; CHECK-NEXT: ret26entry:27 %id = tail call i32 @foo(), !range !0, !noundef !{}28 %and = and i32 %id, 51129 ret i32 %and30}31 32define i32 @test_call_known_max_range_m1() #0 {33; CHECK-LABEL: test_call_known_max_range_m1:34; CHECK: // %bb.0: // %entry35; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill36; CHECK-NEXT: bl foo37; CHECK-NEXT: and w0, w0, #0xff38; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload39; CHECK-NEXT: ret40entry:41 %id = tail call i32 @foo(), !range !1, !noundef !{}42 %and = and i32 %id, 25543 ret i32 %and44}45 46; and can be eliminated47define i32 @test_call_known_max_range_attr() #0 {48; CHECK-LABEL: test_call_known_max_range_attr:49; CHECK: // %bb.0: // %entry50; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill51; CHECK-NEXT: bl foo52; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload53; CHECK-NEXT: ret54entry:55 %id = tail call noundef range(i32 0, 1024) i32 @foo()56 %and = and i32 %id, 102357 ret i32 %and58}59 60define i32 @test_call_known_max_range_attr_no_noundef() #0 {61; CHECK-LABEL: test_call_known_max_range_attr_no_noundef:62; CHECK: // %bb.0: // %entry63; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill64; CHECK-NEXT: bl foo65; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload66; CHECK-NEXT: ret67entry:68 %id = tail call range(i32 0, 1024) i32 @foo()69 %and = and i32 %id, 102370 ret i32 %and71}72 73declare i32 @foo()74 75attributes #0 = { norecurse nounwind }76attributes #1 = { nounwind readnone }77 78!0 = !{i32 0, i32 1024}79!1 = !{i32 0, i32 1023}80