| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s |
| ; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck %s |
| |
| ; mask 0xFFFFFFFE |
| define i32 @test1(i32 %a) { |
| ; CHECK-LABEL: test1: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: rlwinm 3, 3, 0, 0, 30 |
| ; CHECK-NEXT: blr |
| %and = and i32 %a, -2 |
| ret i32 %and |
| } |
| |
| ; mask 0xFFFFFFFFFFFFFFF9 |
| define i64 @test2(i64 %a) { |
| ; CHECK-LABEL: test2: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: rldicl 3, 3, 61, 2 |
| ; CHECK-NEXT: rotldi 3, 3, 3 |
| ; CHECK-NEXT: blr |
| %and = and i64 %a, -7 |
| ret i64 %and |
| } |
| |
| ; mask: 0xFFFFFFC00000 |
| define i64 @test3(i64 %a) { |
| ; CHECK-LABEL: test3: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: rldicl 3, 3, 42, 22 |
| ; CHECK-NEXT: rldicl 3, 3, 22, 16 |
| ; CHECK-NEXT: blr |
| %and = and i64 %a, 281474972516352 |
| ret i64 %and |
| } |
| |
| ; mask: 0xC000000FF |
| define i64 @test4(i64 %a) { |
| ; CHECK-LABEL: test4: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: rldicl 3, 3, 30, 26 |
| ; CHECK-NEXT: rldicl 3, 3, 34, 28 |
| ; CHECK-NEXT: blr |
| %and = and i64 %a, 51539607807 |
| ret i64 %and |
| } |
| |
| ; mask: 0xFFC0FFFF |
| define i64 @test5(i64 %a) { |
| ; CHECK-LABEL: test5: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: rldicl 3, 3, 42, 6 |
| ; CHECK-NEXT: rldicl 3, 3, 22, 32 |
| ; CHECK-NEXT: blr |
| %and = and i64 %a, 4290838527 |
| ret i64 %and |
| } |
| |
| ; mask: 0x3FC0FFE0 |
| define i64 @test6(i64 %a) { |
| ; CHECK-LABEL: test6: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: lis 4, 16320 |
| ; CHECK-NEXT: ori 4, 4, 65504 |
| ; CHECK-NEXT: and 3, 3, 4 |
| ; CHECK-NEXT: blr |
| %and = and i64 %a, 1069613024 |
| ret i64 %and |
| } |
| |
| ; mask: 0x3FC000001FFFF |
| define i64 @test7(i64 %a) { |
| ; CHECK-LABEL: test7: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: rldicl 3, 3, 22, 25 |
| ; CHECK-NEXT: rldicl 3, 3, 42, 14 |
| ; CHECK-NEXT: blr |
| %and = and i64 %a, 1121501860462591 |
| ret i64 %and |
| } |