1; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 3; RUN: llc -march=r600 -mcpu=cypress -verify-machineinstrs < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 4 5; FUNC-LABEL: {{^}}global_copy_i1_to_i1: 6; SI: buffer_load_ubyte 7; SI: v_and_b32_e32 v{{[0-9]+}}, 1 8; SI: buffer_store_byte 9; SI: s_endpgm 10 11; EG: VTX_READ_8 12; EG: AND_INT 13define void @global_copy_i1_to_i1(i1 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind { 14 %load = load i1, i1 addrspace(1)* %in 15 store i1 %load, i1 addrspace(1)* %out, align 1 16 ret void 17} 18 19; FUNC-LABEL: {{^}}local_copy_i1_to_i1: 20; SI: ds_read_u8 21; SI: v_and_b32_e32 v{{[0-9]+}}, 1 22; SI: ds_write_b8 23; SI: s_endpgm 24 25; EG: LDS_UBYTE_READ_RET 26; EG: AND_INT 27; EG: LDS_BYTE_WRITE 28define void @local_copy_i1_to_i1(i1 addrspace(3)* %out, i1 addrspace(3)* %in) nounwind { 29 %load = load i1, i1 addrspace(3)* %in 30 store i1 %load, i1 addrspace(3)* %out, align 1 31 ret void 32} 33 34; FUNC-LABEL: {{^}}constant_copy_i1_to_i1: 35; SI: buffer_load_ubyte 36; SI: v_and_b32_e32 v{{[0-9]+}}, 1 37; SI: buffer_store_byte 38; SI: s_endpgm 39 40; EG: VTX_READ_8 41; EG: AND_INT 42define void @constant_copy_i1_to_i1(i1 addrspace(1)* %out, i1 addrspace(2)* %in) nounwind { 43 %load = load i1, i1 addrspace(2)* %in 44 store i1 %load, i1 addrspace(1)* %out, align 1 45 ret void 46} 47 48; FUNC-LABEL: {{^}}global_sextload_i1_to_i32: 49; SI: buffer_load_ubyte 50; SI: v_bfe_i32 51; SI: buffer_store_dword 52; SI: s_endpgm 53 54; EG: VTX_READ_8 55; EG: BFE_INT 56define void @global_sextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind { 57 %load = load i1, i1 addrspace(1)* %in 58 %ext = sext i1 %load to i32 59 store i32 %ext, i32 addrspace(1)* %out, align 4 60 ret void 61} 62 63; FUNC-LABEL: {{^}}global_zextload_i1_to_i32: 64; SI: buffer_load_ubyte 65; SI: buffer_store_dword 66; SI: s_endpgm 67 68define void @global_zextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind { 69 %load = load i1, i1 addrspace(1)* %in 70 %ext = zext i1 %load to i32 71 store i32 %ext, i32 addrspace(1)* %out, align 4 72 ret void 73} 74 75; FUNC-LABEL: {{^}}global_sextload_i1_to_i64: 76; SI: buffer_load_ubyte 77; SI: v_bfe_i32 78; SI: buffer_store_dwordx2 79; SI: s_endpgm 80define void @global_sextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind { 81 %load = load i1, i1 addrspace(1)* %in 82 %ext = sext i1 %load to i64 83 store i64 %ext, i64 addrspace(1)* %out, align 4 84 ret void 85} 86 87; FUNC-LABEL: {{^}}global_zextload_i1_to_i64: 88; SI: buffer_load_ubyte 89; SI: v_mov_b32_e32 {{v[0-9]+}}, 0 90; SI: buffer_store_dwordx2 91; SI: s_endpgm 92define void @global_zextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind { 93 %load = load i1, i1 addrspace(1)* %in 94 %ext = zext i1 %load to i64 95 store i64 %ext, i64 addrspace(1)* %out, align 4 96 ret void 97} 98 99; FUNC-LABEL: {{^}}i1_arg: 100; SI: buffer_load_ubyte 101; SI: v_and_b32_e32 102; SI: buffer_store_byte 103; SI: s_endpgm 104define void @i1_arg(i1 addrspace(1)* %out, i1 %x) nounwind { 105 store i1 %x, i1 addrspace(1)* %out, align 1 106 ret void 107} 108 109; FUNC-LABEL: {{^}}i1_arg_zext_i32: 110; SI: buffer_load_ubyte 111; SI: buffer_store_dword 112; SI: s_endpgm 113define void @i1_arg_zext_i32(i32 addrspace(1)* %out, i1 %x) nounwind { 114 %ext = zext i1 %x to i32 115 store i32 %ext, i32 addrspace(1)* %out, align 4 116 ret void 117} 118 119; FUNC-LABEL: {{^}}i1_arg_zext_i64: 120; SI: buffer_load_ubyte 121; SI: buffer_store_dwordx2 122; SI: s_endpgm 123define void @i1_arg_zext_i64(i64 addrspace(1)* %out, i1 %x) nounwind { 124 %ext = zext i1 %x to i64 125 store i64 %ext, i64 addrspace(1)* %out, align 8 126 ret void 127} 128 129; FUNC-LABEL: {{^}}i1_arg_sext_i32: 130; SI: buffer_load_ubyte 131; SI: buffer_store_dword 132; SI: s_endpgm 133define void @i1_arg_sext_i32(i32 addrspace(1)* %out, i1 %x) nounwind { 134 %ext = sext i1 %x to i32 135 store i32 %ext, i32addrspace(1)* %out, align 4 136 ret void 137} 138 139; FUNC-LABEL: {{^}}i1_arg_sext_i64: 140; SI: buffer_load_ubyte 141; SI: v_bfe_i32 142; SI: v_ashrrev_i32 143; SI: buffer_store_dwordx2 144; SI: s_endpgm 145define void @i1_arg_sext_i64(i64 addrspace(1)* %out, i1 %x) nounwind { 146 %ext = sext i1 %x to i64 147 store i64 %ext, i64 addrspace(1)* %out, align 8 148 ret void 149} 150