128 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32S3; RUN: llc --mtriple=loongarch32 --mattr=+f -target-abi=ilp32s --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32F-ILP32S4; RUN: llc --mtriple=loongarch32 --mattr=+f -target-abi=ilp32d --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32F-ILP32D5; RUN: llc --mtriple=loongarch32 --mattr=+d -target-abi=ilp32s --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32D-ILP32S6; RUN: llc --mtriple=loongarch32 --mattr=+d -target-abi=ilp32d --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32D-ILP32D7; RUN: llc --mtriple=loongarch64 --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64S8; RUN: llc --mtriple=loongarch64 --mattr=+f -target-abi=lp64s --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64F-LP64S9; RUN: llc --mtriple=loongarch64 --mattr=+f -target-abi=lp64d --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64F-LP64D10; RUN: llc --mtriple=loongarch64 --mattr=+d -target-abi=lp64s --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64D-LP64S11; RUN: llc --mtriple=loongarch64 --mattr=+d -target-abi=lp64d --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64D-LP64D12 13define half @to_half(i16 %bits) {14; LA32S-LABEL: to_half:15; LA32S: # %bb.0:16; LA32S-NEXT: ret17;18; LA32F-ILP32S-LABEL: to_half:19; LA32F-ILP32S: # %bb.0:20; LA32F-ILP32S-NEXT: lu12i.w $a1, -1621; LA32F-ILP32S-NEXT: or $a0, $a0, $a122; LA32F-ILP32S-NEXT: ret23;24; LA32F-ILP32D-LABEL: to_half:25; LA32F-ILP32D: # %bb.0:26; LA32F-ILP32D-NEXT: lu12i.w $a1, -1627; LA32F-ILP32D-NEXT: or $a0, $a0, $a128; LA32F-ILP32D-NEXT: movgr2fr.w $fa0, $a029; LA32F-ILP32D-NEXT: ret30;31; LA32D-ILP32S-LABEL: to_half:32; LA32D-ILP32S: # %bb.0:33; LA32D-ILP32S-NEXT: lu12i.w $a1, -1634; LA32D-ILP32S-NEXT: or $a0, $a0, $a135; LA32D-ILP32S-NEXT: ret36;37; LA32D-ILP32D-LABEL: to_half:38; LA32D-ILP32D: # %bb.0:39; LA32D-ILP32D-NEXT: lu12i.w $a1, -1640; LA32D-ILP32D-NEXT: or $a0, $a0, $a141; LA32D-ILP32D-NEXT: movgr2fr.w $fa0, $a042; LA32D-ILP32D-NEXT: ret43;44; LA64S-LABEL: to_half:45; LA64S: # %bb.0:46; LA64S-NEXT: lu12i.w $a1, -1647; LA64S-NEXT: or $a0, $a0, $a148; LA64S-NEXT: movgr2fr.w $fa0, $a049; LA64S-NEXT: ret50;51; LA64F-LP64S-LABEL: to_half:52; LA64F-LP64S: # %bb.0:53; LA64F-LP64S-NEXT: lu12i.w $a1, -1654; LA64F-LP64S-NEXT: or $a0, $a0, $a155; LA64F-LP64S-NEXT: ret56;57; LA64F-LP64D-LABEL: to_half:58; LA64F-LP64D: # %bb.0:59; LA64F-LP64D-NEXT: lu12i.w $a1, -1660; LA64F-LP64D-NEXT: or $a0, $a0, $a161; LA64F-LP64D-NEXT: movgr2fr.w $fa0, $a062; LA64F-LP64D-NEXT: ret63;64; LA64D-LP64S-LABEL: to_half:65; LA64D-LP64S: # %bb.0:66; LA64D-LP64S-NEXT: lu12i.w $a1, -1667; LA64D-LP64S-NEXT: or $a0, $a0, $a168; LA64D-LP64S-NEXT: ret69;70; LA64D-LP64D-LABEL: to_half:71; LA64D-LP64D: # %bb.0:72; LA64D-LP64D-NEXT: lu12i.w $a1, -1673; LA64D-LP64D-NEXT: or $a0, $a0, $a174; LA64D-LP64D-NEXT: movgr2fr.w $fa0, $a075; LA64D-LP64D-NEXT: ret76 %f = bitcast i16 %bits to half77 ret half %f78}79 80define i16 @from_half(half %f) {81; LA32S-LABEL: from_half:82; LA32S: # %bb.0:83; LA32S-NEXT: ret84;85; LA32F-ILP32S-LABEL: from_half:86; LA32F-ILP32S: # %bb.0:87; LA32F-ILP32S-NEXT: ret88;89; LA32F-ILP32D-LABEL: from_half:90; LA32F-ILP32D: # %bb.0:91; LA32F-ILP32D-NEXT: movfr2gr.s $a0, $fa092; LA32F-ILP32D-NEXT: ret93;94; LA32D-ILP32S-LABEL: from_half:95; LA32D-ILP32S: # %bb.0:96; LA32D-ILP32S-NEXT: ret97;98; LA32D-ILP32D-LABEL: from_half:99; LA32D-ILP32D: # %bb.0:100; LA32D-ILP32D-NEXT: movfr2gr.s $a0, $fa0101; LA32D-ILP32D-NEXT: ret102;103; LA64S-LABEL: from_half:104; LA64S: # %bb.0:105; LA64S-NEXT: movfr2gr.s $a0, $fa0106; LA64S-NEXT: ret107;108; LA64F-LP64S-LABEL: from_half:109; LA64F-LP64S: # %bb.0:110; LA64F-LP64S-NEXT: ret111;112; LA64F-LP64D-LABEL: from_half:113; LA64F-LP64D: # %bb.0:114; LA64F-LP64D-NEXT: movfr2gr.s $a0, $fa0115; LA64F-LP64D-NEXT: ret116;117; LA64D-LP64S-LABEL: from_half:118; LA64D-LP64S: # %bb.0:119; LA64D-LP64S-NEXT: ret120;121; LA64D-LP64D-LABEL: from_half:122; LA64D-LP64D: # %bb.0:123; LA64D-LP64D-NEXT: movfr2gr.s $a0, $fa0124; LA64D-LP64D-NEXT: ret125 %bits = bitcast half %f to i16126 ret i16 %bits127}128