389 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX12,GFX12-TRUE16 %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX12,GFX12-FAKE16 %s5 6; Make sure stack use isn't introduced for these bitcasts.7 8define i160 @bitcast_v5i32_to_i160(<5 x i32> %vec) {9; GFX9-LABEL: bitcast_v5i32_to_i160:10; GFX9: ; %bb.0:11; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12; GFX9-NEXT: s_setpc_b64 s[30:31]13;14; GFX12-LABEL: bitcast_v5i32_to_i160:15; GFX12: ; %bb.0:16; GFX12-NEXT: s_wait_loadcnt_dscnt 0x017; GFX12-NEXT: s_wait_expcnt 0x018; GFX12-NEXT: s_wait_samplecnt 0x019; GFX12-NEXT: s_wait_bvhcnt 0x020; GFX12-NEXT: s_wait_kmcnt 0x021; GFX12-NEXT: s_setpc_b64 s[30:31]22 %bitcast = bitcast <5 x i32> %vec to i16023 ret i160 %bitcast24}25 26define i192 @bitcast_v6i32_to_i192(<6 x i32> %vec) {27; GFX9-LABEL: bitcast_v6i32_to_i192:28; GFX9: ; %bb.0:29; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)30; GFX9-NEXT: s_setpc_b64 s[30:31]31;32; GFX12-LABEL: bitcast_v6i32_to_i192:33; GFX12: ; %bb.0:34; GFX12-NEXT: s_wait_loadcnt_dscnt 0x035; GFX12-NEXT: s_wait_expcnt 0x036; GFX12-NEXT: s_wait_samplecnt 0x037; GFX12-NEXT: s_wait_bvhcnt 0x038; GFX12-NEXT: s_wait_kmcnt 0x039; GFX12-NEXT: s_setpc_b64 s[30:31]40 %bitcast = bitcast <6 x i32> %vec to i19241 ret i192 %bitcast42}43 44define i224 @bitcast_v7i32_to_i224(<7 x i32> %vec) {45; GFX9-LABEL: bitcast_v7i32_to_i224:46; GFX9: ; %bb.0:47; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)48; GFX9-NEXT: s_setpc_b64 s[30:31]49;50; GFX12-LABEL: bitcast_v7i32_to_i224:51; GFX12: ; %bb.0:52; GFX12-NEXT: s_wait_loadcnt_dscnt 0x053; GFX12-NEXT: s_wait_expcnt 0x054; GFX12-NEXT: s_wait_samplecnt 0x055; GFX12-NEXT: s_wait_bvhcnt 0x056; GFX12-NEXT: s_wait_kmcnt 0x057; GFX12-NEXT: s_setpc_b64 s[30:31]58 %bitcast = bitcast <7 x i32> %vec to i22459 ret i224 %bitcast60}61 62define i256 @bitcast_v8i32_to_i256(<8 x i32> %vec) {63; GFX9-LABEL: bitcast_v8i32_to_i256:64; GFX9: ; %bb.0:65; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; GFX9-NEXT: s_setpc_b64 s[30:31]67;68; GFX12-LABEL: bitcast_v8i32_to_i256:69; GFX12: ; %bb.0:70; GFX12-NEXT: s_wait_loadcnt_dscnt 0x071; GFX12-NEXT: s_wait_expcnt 0x072; GFX12-NEXT: s_wait_samplecnt 0x073; GFX12-NEXT: s_wait_bvhcnt 0x074; GFX12-NEXT: s_wait_kmcnt 0x075; GFX12-NEXT: s_setpc_b64 s[30:31]76 %bitcast = bitcast <8 x i32> %vec to i25677 ret i256 %bitcast78}79 80define <5 x i32> @bitcast_i160_to_v5i32(i160 %int) {81; GFX9-LABEL: bitcast_i160_to_v5i32:82; GFX9: ; %bb.0:83; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)84; GFX9-NEXT: s_setpc_b64 s[30:31]85;86; GFX12-LABEL: bitcast_i160_to_v5i32:87; GFX12: ; %bb.0:88; GFX12-NEXT: s_wait_loadcnt_dscnt 0x089; GFX12-NEXT: s_wait_expcnt 0x090; GFX12-NEXT: s_wait_samplecnt 0x091; GFX12-NEXT: s_wait_bvhcnt 0x092; GFX12-NEXT: s_wait_kmcnt 0x093; GFX12-NEXT: s_setpc_b64 s[30:31]94 %bitcast = bitcast i160 %int to <5 x i32>95 ret <5 x i32> %bitcast96}97 98define <6 x i32> @bitcast_i192_to_v6i32(i192 %int) {99; GFX9-LABEL: bitcast_i192_to_v6i32:100; GFX9: ; %bb.0:101; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)102; GFX9-NEXT: s_setpc_b64 s[30:31]103;104; GFX12-LABEL: bitcast_i192_to_v6i32:105; GFX12: ; %bb.0:106; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0107; GFX12-NEXT: s_wait_expcnt 0x0108; GFX12-NEXT: s_wait_samplecnt 0x0109; GFX12-NEXT: s_wait_bvhcnt 0x0110; GFX12-NEXT: s_wait_kmcnt 0x0111; GFX12-NEXT: s_setpc_b64 s[30:31]112 %bitcast = bitcast i192 %int to <6 x i32>113 ret <6 x i32> %bitcast114}115 116define <7 x i32> @bitcast_i224_to_v7i32(i224 %int) {117; GFX9-LABEL: bitcast_i224_to_v7i32:118; GFX9: ; %bb.0:119; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)120; GFX9-NEXT: s_setpc_b64 s[30:31]121;122; GFX12-LABEL: bitcast_i224_to_v7i32:123; GFX12: ; %bb.0:124; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0125; GFX12-NEXT: s_wait_expcnt 0x0126; GFX12-NEXT: s_wait_samplecnt 0x0127; GFX12-NEXT: s_wait_bvhcnt 0x0128; GFX12-NEXT: s_wait_kmcnt 0x0129; GFX12-NEXT: s_setpc_b64 s[30:31]130 %bitcast = bitcast i224 %int to <7 x i32>131 ret <7 x i32> %bitcast132}133 134define <8 x i32> @bitcast_i256_to_v8i32(i256 %int) {135; GFX9-LABEL: bitcast_i256_to_v8i32:136; GFX9: ; %bb.0:137; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)138; GFX9-NEXT: s_setpc_b64 s[30:31]139;140; GFX12-LABEL: bitcast_i256_to_v8i32:141; GFX12: ; %bb.0:142; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0143; GFX12-NEXT: s_wait_expcnt 0x0144; GFX12-NEXT: s_wait_samplecnt 0x0145; GFX12-NEXT: s_wait_bvhcnt 0x0146; GFX12-NEXT: s_wait_kmcnt 0x0147; GFX12-NEXT: s_setpc_b64 s[30:31]148 %bitcast = bitcast i256 %int to <8 x i32>149 ret <8 x i32> %bitcast150}151 152define i192 @bitcast_v3i64_to_i192(<3 x i64> %vec) {153; GFX9-LABEL: bitcast_v3i64_to_i192:154; GFX9: ; %bb.0:155; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)156; GFX9-NEXT: s_setpc_b64 s[30:31]157;158; GFX12-LABEL: bitcast_v3i64_to_i192:159; GFX12: ; %bb.0:160; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0161; GFX12-NEXT: s_wait_expcnt 0x0162; GFX12-NEXT: s_wait_samplecnt 0x0163; GFX12-NEXT: s_wait_bvhcnt 0x0164; GFX12-NEXT: s_wait_kmcnt 0x0165; GFX12-NEXT: s_setpc_b64 s[30:31]166 %bitcast = bitcast <3 x i64> %vec to i192167 ret i192 %bitcast168}169 170define <3 x i64> @bitcast_i192_to_v3i64(i192 %int) {171; GFX9-LABEL: bitcast_i192_to_v3i64:172; GFX9: ; %bb.0:173; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)174; GFX9-NEXT: s_setpc_b64 s[30:31]175;176; GFX12-LABEL: bitcast_i192_to_v3i64:177; GFX12: ; %bb.0:178; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0179; GFX12-NEXT: s_wait_expcnt 0x0180; GFX12-NEXT: s_wait_samplecnt 0x0181; GFX12-NEXT: s_wait_bvhcnt 0x0182; GFX12-NEXT: s_wait_kmcnt 0x0183; GFX12-NEXT: s_setpc_b64 s[30:31]184 %bitcast = bitcast i192 %int to <3 x i64>185 ret <3 x i64> %bitcast186}187 188define <10 x i16> @bitcast_i160_to_v10i16(i160 %int) {189; GFX9-LABEL: bitcast_i160_to_v10i16:190; GFX9: ; %bb.0:191; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)192; GFX9-NEXT: s_mov_b32 s4, 0xffff193; GFX9-NEXT: v_bfi_b32 v0, s4, v0, v0194; GFX9-NEXT: v_bfi_b32 v2, s4, v2, v2195; GFX9-NEXT: s_setpc_b64 s[30:31]196;197; GFX12-TRUE16-LABEL: bitcast_i160_to_v10i16:198; GFX12-TRUE16: ; %bb.0:199; GFX12-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0200; GFX12-TRUE16-NEXT: s_wait_expcnt 0x0201; GFX12-TRUE16-NEXT: s_wait_samplecnt 0x0202; GFX12-TRUE16-NEXT: s_wait_bvhcnt 0x0203; GFX12-TRUE16-NEXT: s_wait_kmcnt 0x0204; GFX12-TRUE16-NEXT: s_setpc_b64 s[30:31]205;206; GFX12-FAKE16-LABEL: bitcast_i160_to_v10i16:207; GFX12-FAKE16: ; %bb.0:208; GFX12-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0209; GFX12-FAKE16-NEXT: s_wait_expcnt 0x0210; GFX12-FAKE16-NEXT: s_wait_samplecnt 0x0211; GFX12-FAKE16-NEXT: s_wait_bvhcnt 0x0212; GFX12-FAKE16-NEXT: s_wait_kmcnt 0x0213; GFX12-FAKE16-NEXT: v_bfi_b32 v0, 0xffff, v0, v0214; GFX12-FAKE16-NEXT: v_bfi_b32 v2, 0xffff, v2, v2215; GFX12-FAKE16-NEXT: s_setpc_b64 s[30:31]216 %bitcast = bitcast i160 %int to <10 x i16>217 ret <10 x i16> %bitcast218}219 220define i160 @bitcast_v10i16_to_i160(<10 x i16> %vec) {221; GFX9-LABEL: bitcast_v10i16_to_i160:222; GFX9: ; %bb.0:223; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)224; GFX9-NEXT: s_setpc_b64 s[30:31]225;226; GFX12-LABEL: bitcast_v10i16_to_i160:227; GFX12: ; %bb.0:228; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0229; GFX12-NEXT: s_wait_expcnt 0x0230; GFX12-NEXT: s_wait_samplecnt 0x0231; GFX12-NEXT: s_wait_bvhcnt 0x0232; GFX12-NEXT: s_wait_kmcnt 0x0233; GFX12-NEXT: s_setpc_b64 s[30:31]234 %bitcast = bitcast <10 x i16> %vec to i160235 ret i160 %bitcast236}237 238define i12 @bitcast_v2i6_to_i12(<2 x i6> %vec) {239; GFX9-LABEL: bitcast_v2i6_to_i12:240; GFX9: ; %bb.0:241; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)242; GFX9-NEXT: v_lshlrev_b16_e32 v1, 6, v1243; GFX9-NEXT: v_and_b32_e32 v0, 63, v0244; GFX9-NEXT: v_or_b32_e32 v0, v0, v1245; GFX9-NEXT: v_and_b32_e32 v0, 0xfff, v0246; GFX9-NEXT: s_setpc_b64 s[30:31]247;248; GFX12-TRUE16-LABEL: bitcast_v2i6_to_i12:249; GFX12-TRUE16: ; %bb.0:250; GFX12-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0251; GFX12-TRUE16-NEXT: s_wait_expcnt 0x0252; GFX12-TRUE16-NEXT: s_wait_samplecnt 0x0253; GFX12-TRUE16-NEXT: s_wait_bvhcnt 0x0254; GFX12-TRUE16-NEXT: s_wait_kmcnt 0x0255; GFX12-TRUE16-NEXT: v_lshlrev_b16 v0.h, 6, v1.l256; GFX12-TRUE16-NEXT: v_and_b16 v0.l, v0.l, 63257; GFX12-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)258; GFX12-TRUE16-NEXT: v_or_b16 v0.l, v0.l, v0.h259; GFX12-TRUE16-NEXT: v_and_b16 v0.l, 0xfff, v0.l260; GFX12-TRUE16-NEXT: s_setpc_b64 s[30:31]261;262; GFX12-FAKE16-LABEL: bitcast_v2i6_to_i12:263; GFX12-FAKE16: ; %bb.0:264; GFX12-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0265; GFX12-FAKE16-NEXT: s_wait_expcnt 0x0266; GFX12-FAKE16-NEXT: s_wait_samplecnt 0x0267; GFX12-FAKE16-NEXT: s_wait_bvhcnt 0x0268; GFX12-FAKE16-NEXT: s_wait_kmcnt 0x0269; GFX12-FAKE16-NEXT: v_lshlrev_b16 v1, 6, v1270; GFX12-FAKE16-NEXT: v_and_b32_e32 v0, 63, v0271; GFX12-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)272; GFX12-FAKE16-NEXT: v_or_b32_e32 v0, v0, v1273; GFX12-FAKE16-NEXT: v_and_b32_e32 v0, 0xfff, v0274; GFX12-FAKE16-NEXT: s_setpc_b64 s[30:31]275 %bitcast = bitcast <2 x i6> %vec to i12276 ret i12 %bitcast277}278 279define <2 x i6> @bitcast_i12_to_v2i6(i12 %int) {280; GFX9-LABEL: bitcast_i12_to_v2i6:281; GFX9: ; %bb.0:282; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)283; GFX9-NEXT: v_and_b32_e32 v2, 63, v0284; GFX9-NEXT: v_lshrrev_b16_e32 v0, 6, v0285; GFX9-NEXT: v_and_b32_e32 v1, 63, v0286; GFX9-NEXT: v_mov_b32_e32 v0, v2287; GFX9-NEXT: s_setpc_b64 s[30:31]288;289; GFX12-TRUE16-LABEL: bitcast_i12_to_v2i6:290; GFX12-TRUE16: ; %bb.0:291; GFX12-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0292; GFX12-TRUE16-NEXT: s_wait_expcnt 0x0293; GFX12-TRUE16-NEXT: s_wait_samplecnt 0x0294; GFX12-TRUE16-NEXT: s_wait_bvhcnt 0x0295; GFX12-TRUE16-NEXT: s_wait_kmcnt 0x0296; GFX12-TRUE16-NEXT: v_lshrrev_b16 v0.h, 6, v0.l297; GFX12-TRUE16-NEXT: v_and_b16 v0.l, v0.l, 63298; GFX12-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)299; GFX12-TRUE16-NEXT: v_and_b16 v1.l, v0.h, 63300; GFX12-TRUE16-NEXT: s_setpc_b64 s[30:31]301;302; GFX12-FAKE16-LABEL: bitcast_i12_to_v2i6:303; GFX12-FAKE16: ; %bb.0:304; GFX12-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0305; GFX12-FAKE16-NEXT: s_wait_expcnt 0x0306; GFX12-FAKE16-NEXT: s_wait_samplecnt 0x0307; GFX12-FAKE16-NEXT: s_wait_bvhcnt 0x0308; GFX12-FAKE16-NEXT: s_wait_kmcnt 0x0309; GFX12-FAKE16-NEXT: v_lshrrev_b16 v1, 6, v0310; GFX12-FAKE16-NEXT: v_and_b32_e32 v0, 63, v0311; GFX12-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)312; GFX12-FAKE16-NEXT: v_and_b32_e32 v1, 63, v1313; GFX12-FAKE16-NEXT: s_setpc_b64 s[30:31]314 %bitcast = bitcast i12 %int to <2 x i6>315 ret <2 x i6> %bitcast316}317 318define i160 @bitcast_v5f32_to_i160(<5 x float> %vec) {319; GFX9-LABEL: bitcast_v5f32_to_i160:320; GFX9: ; %bb.0:321; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)322; GFX9-NEXT: s_setpc_b64 s[30:31]323;324; GFX12-LABEL: bitcast_v5f32_to_i160:325; GFX12: ; %bb.0:326; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0327; GFX12-NEXT: s_wait_expcnt 0x0328; GFX12-NEXT: s_wait_samplecnt 0x0329; GFX12-NEXT: s_wait_bvhcnt 0x0330; GFX12-NEXT: s_wait_kmcnt 0x0331; GFX12-NEXT: s_setpc_b64 s[30:31]332 %bitcast = bitcast <5 x float> %vec to i160333 ret i160 %bitcast334}335 336define <5 x float> @bitcast_i160_to_v5f32(i160 %int) {337; GFX9-LABEL: bitcast_i160_to_v5f32:338; GFX9: ; %bb.0:339; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)340; GFX9-NEXT: s_setpc_b64 s[30:31]341;342; GFX12-LABEL: bitcast_i160_to_v5f32:343; GFX12: ; %bb.0:344; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0345; GFX12-NEXT: s_wait_expcnt 0x0346; GFX12-NEXT: s_wait_samplecnt 0x0347; GFX12-NEXT: s_wait_bvhcnt 0x0348; GFX12-NEXT: s_wait_kmcnt 0x0349; GFX12-NEXT: s_setpc_b64 s[30:31]350 %bitcast = bitcast i160 %int to <5 x float>351 ret <5 x float> %bitcast352}353 354define <6 x float> @bitcast_i192_to_v6f32(i192 %int) {355; GFX9-LABEL: bitcast_i192_to_v6f32:356; GFX9: ; %bb.0:357; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)358; GFX9-NEXT: s_setpc_b64 s[30:31]359;360; GFX12-LABEL: bitcast_i192_to_v6f32:361; GFX12: ; %bb.0:362; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0363; GFX12-NEXT: s_wait_expcnt 0x0364; GFX12-NEXT: s_wait_samplecnt 0x0365; GFX12-NEXT: s_wait_bvhcnt 0x0366; GFX12-NEXT: s_wait_kmcnt 0x0367; GFX12-NEXT: s_setpc_b64 s[30:31]368 %bitcast = bitcast i192 %int to <6 x float>369 ret <6 x float> %bitcast370}371 372define i192 @bitcast_v6f32_to_i192(<6 x float> %vec) {373; GFX9-LABEL: bitcast_v6f32_to_i192:374; GFX9: ; %bb.0:375; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)376; GFX9-NEXT: s_setpc_b64 s[30:31]377;378; GFX12-LABEL: bitcast_v6f32_to_i192:379; GFX12: ; %bb.0:380; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0381; GFX12-NEXT: s_wait_expcnt 0x0382; GFX12-NEXT: s_wait_samplecnt 0x0383; GFX12-NEXT: s_wait_bvhcnt 0x0384; GFX12-NEXT: s_wait_kmcnt 0x0385; GFX12-NEXT: s_setpc_b64 s[30:31]386 %bitcast = bitcast <6 x float> %vec to i192387 ret i192 %bitcast388}389