1 ; RUN: llc -march=aarch64 -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s 2 3 ; and can be eliminated 4 ; CHECK-LABEL: {{^}}test_call_known_max_range: 5 ; CHECK: bl foo 6 ; CHECK-NOT: and 7 ; CHECK: ret 8 define i32 @test_call_known_max_range() #0 { 9 entry: 10 %id = tail call i32 @foo(), !range !0 11 %and = and i32 %id, 1023 12 ret i32 %and 13 } 14 15 ; CHECK-LABEL: {{^}}test_call_known_trunc_1_bit_range: 16 ; CHECK: bl foo 17 ; CHECK: and w{{[0-9]+}}, w0, #0x1ff 18 ; CHECK: ret 19 define i32 @test_call_known_trunc_1_bit_range() #0 { 20 entry: 21 %id = tail call i32 @foo(), !range !0 22 %and = and i32 %id, 511 23 ret i32 %and 24 } 25 26 ; CHECK-LABEL: {{^}}test_call_known_max_range_m1: 27 ; CHECK: bl foo 28 ; CHECK: and w{{[0-9]+}}, w0, #0xff 29 ; CHECK: ret 30 define i32 @test_call_known_max_range_m1() #0 { 31 entry: 32 %id = tail call i32 @foo(), !range !1 33 %and = and i32 %id, 255 34 ret i32 %and 35 } 36 37 38 declare i32 @foo() 39 40 attributes #0 = { norecurse nounwind } 41 attributes #1 = { nounwind readnone } 42 43 !0 = !{i32 0, i32 1024} 44 !1 = !{i32 0, i32 1023} 45