| ; RUN: llc -march=amdgcn < %s | FileCheck %s |
| |
| ; CHECK-LABEL: {{^}}zext_shl64_to_32: |
| ; CHECK: s_lshl_b32 |
| ; CHECK-NOT: s_lshl_b64 |
| define amdgpu_kernel void @zext_shl64_to_32(i64 addrspace(1)* nocapture %out, i32 %x) { |
| %and = and i32 %x, 1073741823 |
| %ext = zext i32 %and to i64 |
| %shl = shl i64 %ext, 2 |
| store i64 %shl, i64 addrspace(1)* %out, align 4 |
| ret void |
| } |
| |
| ; CHECK-LABEL: {{^}}sext_shl64_to_32: |
| ; CHECK: s_lshl_b32 |
| ; CHECK-NOT: s_lshl_b64 |
| define amdgpu_kernel void @sext_shl64_to_32(i64 addrspace(1)* nocapture %out, i32 %x) { |
| %and = and i32 %x, 536870911 |
| %ext = sext i32 %and to i64 |
| %shl = shl i64 %ext, 2 |
| store i64 %shl, i64 addrspace(1)* %out, align 4 |
| ret void |
| } |
| |
| ; CHECK-LABEL: {{^}}zext_shl64_overflow: |
| ; CHECK: s_lshl_b64 |
| ; CHECK-NOT: s_lshl_b32 |
| define amdgpu_kernel void @zext_shl64_overflow(i64 addrspace(1)* nocapture %out, i32 %x) { |
| %and = and i32 %x, 2147483647 |
| %ext = zext i32 %and to i64 |
| %shl = shl i64 %ext, 2 |
| store i64 %shl, i64 addrspace(1)* %out, align 4 |
| ret void |
| } |
| |
| ; CHECK-LABEL: {{^}}sext_shl64_overflow: |
| ; CHECK: s_lshl_b64 |
| ; CHECK-NOT: s_lshl_b32 |
| define amdgpu_kernel void @sext_shl64_overflow(i64 addrspace(1)* nocapture %out, i32 %x) { |
| %and = and i32 %x, 2147483647 |
| %ext = sext i32 %and to i64 |
| %shl = shl i64 %ext, 2 |
| store i64 %shl, i64 addrspace(1)* %out, align 4 |
| ret void |
| } |