1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=amdgcn -global-isel=0 -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX6-SDAG %s 3; RUN: llc -mtriple=amdgcn -global-isel=1 -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX6-ISEL %s 4; RUN: llc -mtriple=amdgcn -global-isel=0 -mcpu=fiji < %s | FileCheck -check-prefixes=GFX8-SDAG %s 5; RUN: llc -mtriple=amdgcn -global-isel=1 -mcpu=fiji < %s | FileCheck -check-prefixes=GFX8-ISEL %s 6; RUN: llc -mtriple=amdgcn -global-isel=0 -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9-SDAG %s 7; RUN: llc -mtriple=amdgcn -global-isel=1 -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9-ISEL %s 8; RUN: llc -mtriple=amdgcn -global-isel=0 -mcpu=gfx1030 < %s | FileCheck -check-prefixes=GFX10-SDAG %s 9; RUN: llc -mtriple=amdgcn -global-isel=1 -mcpu=gfx1030 < %s | FileCheck -check-prefixes=GFX10-ISEL %s 10; RUN: llc -mtriple=amdgcn -amdgpu-enable-delay-alu=0 -global-isel=0 -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11-SDAG %s 11; RUN: llc -mtriple=amdgcn -amdgpu-enable-delay-alu=0 -global-isel=1 -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11-ISEL %s 12 13declare i64 @llvm.get.fpenv.i64() 14 15declare void @llvm.set.fpenv.i64(i64) 16 17define i64 @get_fpenv() { 18; GFX6-SDAG-LABEL: get_fpenv: 19; GFX6-SDAG: ; %bb.0: ; %entry 20; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 21; GFX6-SDAG-NEXT: s_getreg_b32 s4, hwreg(HW_REG_TRAPSTS, 0, 5) 22; GFX6-SDAG-NEXT: s_getreg_b32 s5, hwreg(HW_REG_MODE, 0, 23) 23; GFX6-SDAG-NEXT: v_mov_b32_e32 v0, s5 24; GFX6-SDAG-NEXT: v_mov_b32_e32 v1, s4 25; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31] 26; 27; GFX6-ISEL-LABEL: get_fpenv: 28; GFX6-ISEL: ; %bb.0: ; %entry 29; GFX6-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 30; GFX6-ISEL-NEXT: s_getreg_b32 s4, hwreg(HW_REG_MODE, 0, 23) 31; GFX6-ISEL-NEXT: s_getreg_b32 s5, hwreg(HW_REG_TRAPSTS, 0, 5) 32; GFX6-ISEL-NEXT: v_mov_b32_e32 v0, s4 33; GFX6-ISEL-NEXT: v_mov_b32_e32 v1, s5 34; GFX6-ISEL-NEXT: s_setpc_b64 s[30:31] 35; 36; GFX8-SDAG-LABEL: get_fpenv: 37; GFX8-SDAG: ; %bb.0: ; %entry 38; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 39; GFX8-SDAG-NEXT: s_getreg_b32 s4, hwreg(HW_REG_TRAPSTS, 0, 5) 40; GFX8-SDAG-NEXT: s_getreg_b32 s5, hwreg(HW_REG_MODE, 0, 23) 41; GFX8-SDAG-NEXT: v_mov_b32_e32 v0, s5 42; GFX8-SDAG-NEXT: v_mov_b32_e32 v1, s4 43; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31] 44; 45; GFX8-ISEL-LABEL: get_fpenv: 46; GFX8-ISEL: ; %bb.0: ; %entry 47; GFX8-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 48; GFX8-ISEL-NEXT: s_getreg_b32 s4, hwreg(HW_REG_MODE, 0, 23) 49; GFX8-ISEL-NEXT: s_getreg_b32 s5, hwreg(HW_REG_TRAPSTS, 0, 5) 50; GFX8-ISEL-NEXT: v_mov_b32_e32 v0, s4 51; GFX8-ISEL-NEXT: v_mov_b32_e32 v1, s5 52; GFX8-ISEL-NEXT: s_setpc_b64 s[30:31] 53; 54; GFX9-SDAG-LABEL: get_fpenv: 55; GFX9-SDAG: ; %bb.0: ; %entry 56; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 57; GFX9-SDAG-NEXT: s_getreg_b32 s4, hwreg(HW_REG_TRAPSTS, 0, 5) 58; GFX9-SDAG-NEXT: s_getreg_b32 s5, hwreg(HW_REG_MODE, 0, 23) 59; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s5 60; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s4 61; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31] 62; 63; GFX9-ISEL-LABEL: get_fpenv: 64; GFX9-ISEL: ; %bb.0: ; %entry 65; GFX9-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 66; GFX9-ISEL-NEXT: s_getreg_b32 s4, hwreg(HW_REG_MODE, 0, 23) 67; GFX9-ISEL-NEXT: s_getreg_b32 s5, hwreg(HW_REG_TRAPSTS, 0, 5) 68; GFX9-ISEL-NEXT: v_mov_b32_e32 v0, s4 69; GFX9-ISEL-NEXT: v_mov_b32_e32 v1, s5 70; GFX9-ISEL-NEXT: s_setpc_b64 s[30:31] 71; 72; GFX10-SDAG-LABEL: get_fpenv: 73; GFX10-SDAG: ; %bb.0: ; %entry 74; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 75; GFX10-SDAG-NEXT: s_getreg_b32 s4, hwreg(HW_REG_TRAPSTS, 0, 5) 76; GFX10-SDAG-NEXT: s_getreg_b32 s5, hwreg(HW_REG_MODE, 0, 23) 77; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s4 78; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s5 79; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31] 80; 81; GFX10-ISEL-LABEL: get_fpenv: 82; GFX10-ISEL: ; %bb.0: ; %entry 83; GFX10-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 84; GFX10-ISEL-NEXT: s_getreg_b32 s4, hwreg(HW_REG_MODE, 0, 23) 85; GFX10-ISEL-NEXT: s_getreg_b32 s5, hwreg(HW_REG_TRAPSTS, 0, 5) 86; GFX10-ISEL-NEXT: v_mov_b32_e32 v0, s4 87; GFX10-ISEL-NEXT: v_mov_b32_e32 v1, s5 88; GFX10-ISEL-NEXT: s_setpc_b64 s[30:31] 89; 90; GFX11-SDAG-LABEL: get_fpenv: 91; GFX11-SDAG: ; %bb.0: ; %entry 92; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 93; GFX11-SDAG-NEXT: s_getreg_b32 s0, hwreg(HW_REG_TRAPSTS, 0, 5) 94; GFX11-SDAG-NEXT: s_getreg_b32 s1, hwreg(HW_REG_MODE, 0, 23) 95; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, s0 :: v_dual_mov_b32 v0, s1 96; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31] 97; 98; GFX11-ISEL-LABEL: get_fpenv: 99; GFX11-ISEL: ; %bb.0: ; %entry 100; GFX11-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 101; GFX11-ISEL-NEXT: s_getreg_b32 s0, hwreg(HW_REG_MODE, 0, 23) 102; GFX11-ISEL-NEXT: s_getreg_b32 s1, hwreg(HW_REG_TRAPSTS, 0, 5) 103; GFX11-ISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 104; GFX11-ISEL-NEXT: s_setpc_b64 s[30:31] 105entry: 106 %0 = call i64 @llvm.get.fpenv.i64() 107 ret i64 %0 108} 109 110define void @set_fpenv(i64 %env) { 111; GFX6-SDAG-LABEL: set_fpenv: 112; GFX6-SDAG: ; %bb.0: ; %entry 113; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 114; GFX6-SDAG-NEXT: v_readfirstlane_b32 s4, v0 115; GFX6-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 116; GFX6-SDAG-NEXT: v_readfirstlane_b32 s4, v1 117; GFX6-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 118; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31] 119; 120; GFX6-ISEL-LABEL: set_fpenv: 121; GFX6-ISEL: ; %bb.0: ; %entry 122; GFX6-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 123; GFX6-ISEL-NEXT: v_readfirstlane_b32 s4, v0 124; GFX6-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 125; GFX6-ISEL-NEXT: v_readfirstlane_b32 s4, v1 126; GFX6-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 127; GFX6-ISEL-NEXT: s_setpc_b64 s[30:31] 128; 129; GFX8-SDAG-LABEL: set_fpenv: 130; GFX8-SDAG: ; %bb.0: ; %entry 131; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 132; GFX8-SDAG-NEXT: v_readfirstlane_b32 s4, v0 133; GFX8-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 134; GFX8-SDAG-NEXT: v_readfirstlane_b32 s4, v1 135; GFX8-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 136; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31] 137; 138; GFX8-ISEL-LABEL: set_fpenv: 139; GFX8-ISEL: ; %bb.0: ; %entry 140; GFX8-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 141; GFX8-ISEL-NEXT: v_readfirstlane_b32 s4, v0 142; GFX8-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 143; GFX8-ISEL-NEXT: v_readfirstlane_b32 s4, v1 144; GFX8-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 145; GFX8-ISEL-NEXT: s_setpc_b64 s[30:31] 146; 147; GFX9-SDAG-LABEL: set_fpenv: 148; GFX9-SDAG: ; %bb.0: ; %entry 149; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 150; GFX9-SDAG-NEXT: v_readfirstlane_b32 s4, v0 151; GFX9-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 152; GFX9-SDAG-NEXT: v_readfirstlane_b32 s4, v1 153; GFX9-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 154; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31] 155; 156; GFX9-ISEL-LABEL: set_fpenv: 157; GFX9-ISEL: ; %bb.0: ; %entry 158; GFX9-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 159; GFX9-ISEL-NEXT: v_readfirstlane_b32 s4, v0 160; GFX9-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 161; GFX9-ISEL-NEXT: v_readfirstlane_b32 s4, v1 162; GFX9-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 163; GFX9-ISEL-NEXT: s_setpc_b64 s[30:31] 164; 165; GFX10-SDAG-LABEL: set_fpenv: 166; GFX10-SDAG: ; %bb.0: ; %entry 167; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 168; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v0 169; GFX10-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 170; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v1 171; GFX10-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 172; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31] 173; 174; GFX10-ISEL-LABEL: set_fpenv: 175; GFX10-ISEL: ; %bb.0: ; %entry 176; GFX10-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 177; GFX10-ISEL-NEXT: v_readfirstlane_b32 s4, v0 178; GFX10-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 179; GFX10-ISEL-NEXT: v_readfirstlane_b32 s4, v1 180; GFX10-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 181; GFX10-ISEL-NEXT: s_setpc_b64 s[30:31] 182; 183; GFX11-SDAG-LABEL: set_fpenv: 184; GFX11-SDAG: ; %bb.0: ; %entry 185; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 186; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v0 187; GFX11-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s0 188; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v1 189; GFX11-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s0 190; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31] 191; 192; GFX11-ISEL-LABEL: set_fpenv: 193; GFX11-ISEL: ; %bb.0: ; %entry 194; GFX11-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 195; GFX11-ISEL-NEXT: v_readfirstlane_b32 s0, v0 196; GFX11-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s0 197; GFX11-ISEL-NEXT: v_readfirstlane_b32 s0, v1 198; GFX11-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s0 199; GFX11-ISEL-NEXT: s_setpc_b64 s[30:31] 200entry: 201 call void @llvm.set.fpenv.i64(i64 %env) 202 ret void 203} 204 205define void @set_fpenv_constant() { 206; GFX6-SDAG-LABEL: set_fpenv_constant: 207; GFX6-SDAG: ; %bb.0: ; %entry 208; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 209; GFX6-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 210; GFX6-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 211; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31] 212; 213; GFX6-ISEL-LABEL: set_fpenv_constant: 214; GFX6-ISEL: ; %bb.0: ; %entry 215; GFX6-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 216; GFX6-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 217; GFX6-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 218; GFX6-ISEL-NEXT: s_setpc_b64 s[30:31] 219; 220; GFX8-SDAG-LABEL: set_fpenv_constant: 221; GFX8-SDAG: ; %bb.0: ; %entry 222; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 223; GFX8-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 224; GFX8-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 225; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31] 226; 227; GFX8-ISEL-LABEL: set_fpenv_constant: 228; GFX8-ISEL: ; %bb.0: ; %entry 229; GFX8-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 230; GFX8-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 231; GFX8-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 232; GFX8-ISEL-NEXT: s_setpc_b64 s[30:31] 233; 234; GFX9-SDAG-LABEL: set_fpenv_constant: 235; GFX9-SDAG: ; %bb.0: ; %entry 236; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 237; GFX9-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 238; GFX9-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 239; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31] 240; 241; GFX9-ISEL-LABEL: set_fpenv_constant: 242; GFX9-ISEL: ; %bb.0: ; %entry 243; GFX9-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 244; GFX9-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 245; GFX9-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 246; GFX9-ISEL-NEXT: s_setpc_b64 s[30:31] 247; 248; GFX10-SDAG-LABEL: set_fpenv_constant: 249; GFX10-SDAG: ; %bb.0: ; %entry 250; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 251; GFX10-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 252; GFX10-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 253; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31] 254; 255; GFX10-ISEL-LABEL: set_fpenv_constant: 256; GFX10-ISEL: ; %bb.0: ; %entry 257; GFX10-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 258; GFX10-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 259; GFX10-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 260; GFX10-ISEL-NEXT: s_setpc_b64 s[30:31] 261; 262; GFX11-SDAG-LABEL: set_fpenv_constant: 263; GFX11-SDAG: ; %bb.0: ; %entry 264; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 265; GFX11-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 266; GFX11-SDAG-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 267; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31] 268; 269; GFX11-ISEL-LABEL: set_fpenv_constant: 270; GFX11-ISEL: ; %bb.0: ; %entry 271; GFX11-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 272; GFX11-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 0, 23), 0 273; GFX11-ISEL-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, 0, 5), 0 274; GFX11-ISEL-NEXT: s_setpc_b64 s[30:31] 275entry: 276 call void @llvm.set.fpenv.i64(i64 0) 277 ret void 278} 279 280define void @get_set_fpenv() { 281; GFX6-SDAG-LABEL: get_set_fpenv: 282; GFX6-SDAG: ; %bb.0: ; %entry 283; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 284; GFX6-SDAG-NEXT: s_getreg_b32 s4, hwreg(HW_REG_TRAPSTS, 0, 5) 285; GFX6-SDAG-NEXT: s_getreg_b32 s5, hwreg(HW_REG_MODE, 0, 23) 286; GFX6-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s5 287; GFX6-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 288; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31] 289; 290; GFX6-ISEL-LABEL: get_set_fpenv: 291; GFX6-ISEL: ; %bb.0: ; %entry 292; GFX6-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 293; GFX6-ISEL-NEXT: s_getreg_b32 s4, hwreg(HW_REG_MODE, 0, 23) 294; GFX6-ISEL-NEXT: s_getreg_b32 s5, hwreg(HW_REG_TRAPSTS, 0, 5) 295; GFX6-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 296; GFX6-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s5 297; GFX6-ISEL-NEXT: s_setpc_b64 s[30:31] 298; 299; GFX8-SDAG-LABEL: get_set_fpenv: 300; GFX8-SDAG: ; %bb.0: ; %entry 301; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 302; GFX8-SDAG-NEXT: s_getreg_b32 s4, hwreg(HW_REG_TRAPSTS, 0, 5) 303; GFX8-SDAG-NEXT: s_getreg_b32 s5, hwreg(HW_REG_MODE, 0, 23) 304; GFX8-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s5 305; GFX8-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 306; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31] 307; 308; GFX8-ISEL-LABEL: get_set_fpenv: 309; GFX8-ISEL: ; %bb.0: ; %entry 310; GFX8-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 311; GFX8-ISEL-NEXT: s_getreg_b32 s4, hwreg(HW_REG_MODE, 0, 23) 312; GFX8-ISEL-NEXT: s_getreg_b32 s5, hwreg(HW_REG_TRAPSTS, 0, 5) 313; GFX8-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 314; GFX8-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s5 315; GFX8-ISEL-NEXT: s_setpc_b64 s[30:31] 316; 317; GFX9-SDAG-LABEL: get_set_fpenv: 318; GFX9-SDAG: ; %bb.0: ; %entry 319; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 320; GFX9-SDAG-NEXT: s_getreg_b32 s4, hwreg(HW_REG_TRAPSTS, 0, 5) 321; GFX9-SDAG-NEXT: s_getreg_b32 s5, hwreg(HW_REG_MODE, 0, 23) 322; GFX9-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s5 323; GFX9-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 324; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31] 325; 326; GFX9-ISEL-LABEL: get_set_fpenv: 327; GFX9-ISEL: ; %bb.0: ; %entry 328; GFX9-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 329; GFX9-ISEL-NEXT: s_getreg_b32 s4, hwreg(HW_REG_MODE, 0, 23) 330; GFX9-ISEL-NEXT: s_getreg_b32 s5, hwreg(HW_REG_TRAPSTS, 0, 5) 331; GFX9-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 332; GFX9-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s5 333; GFX9-ISEL-NEXT: s_setpc_b64 s[30:31] 334; 335; GFX10-SDAG-LABEL: get_set_fpenv: 336; GFX10-SDAG: ; %bb.0: ; %entry 337; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 338; GFX10-SDAG-NEXT: s_getreg_b32 s4, hwreg(HW_REG_TRAPSTS, 0, 5) 339; GFX10-SDAG-NEXT: s_getreg_b32 s5, hwreg(HW_REG_MODE, 0, 23) 340; GFX10-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s5 341; GFX10-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s4 342; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31] 343; 344; GFX10-ISEL-LABEL: get_set_fpenv: 345; GFX10-ISEL: ; %bb.0: ; %entry 346; GFX10-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 347; GFX10-ISEL-NEXT: s_getreg_b32 s4, hwreg(HW_REG_MODE, 0, 23) 348; GFX10-ISEL-NEXT: s_getreg_b32 s5, hwreg(HW_REG_TRAPSTS, 0, 5) 349; GFX10-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s4 350; GFX10-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s5 351; GFX10-ISEL-NEXT: s_setpc_b64 s[30:31] 352; 353; GFX11-SDAG-LABEL: get_set_fpenv: 354; GFX11-SDAG: ; %bb.0: ; %entry 355; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 356; GFX11-SDAG-NEXT: s_getreg_b32 s0, hwreg(HW_REG_TRAPSTS, 0, 5) 357; GFX11-SDAG-NEXT: s_getreg_b32 s1, hwreg(HW_REG_MODE, 0, 23) 358; GFX11-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s1 359; GFX11-SDAG-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s0 360; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31] 361; 362; GFX11-ISEL-LABEL: get_set_fpenv: 363; GFX11-ISEL: ; %bb.0: ; %entry 364; GFX11-ISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 365; GFX11-ISEL-NEXT: s_getreg_b32 s0, hwreg(HW_REG_MODE, 0, 23) 366; GFX11-ISEL-NEXT: s_getreg_b32 s1, hwreg(HW_REG_TRAPSTS, 0, 5) 367; GFX11-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_MODE, 0, 23), s0 368; GFX11-ISEL-NEXT: s_setreg_b32 hwreg(HW_REG_TRAPSTS, 0, 5), s1 369; GFX11-ISEL-NEXT: s_setpc_b64 s[30:31] 370entry: 371 %0 = call i64 @llvm.get.fpenv.i64() 372 call void @llvm.set.fpenv.i64(i64 %0) 373 ret void 374} 375