1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \ 3; RUN: -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s --check-prefixes=CHECK-LE 4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \ 5; RUN: -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \ 6; RUN: --check-prefixes=CHECK-NOPCREL-BE 7; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \ 8; RUN: -mattr=-pcrelative-memops -ppc-asm-full-reg-names -mcpu=pwr10 < %s | \ 9; RUN: FileCheck %s --check-prefixes=CHECK-NOPCREL-LE 10; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \ 11; RUN: -mattr=-prefix-instrs -ppc-asm-full-reg-names -mcpu=pwr10 < %s | \ 12; RUN: FileCheck %s --check-prefixes=CHECK-NOPREFIX 13; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \ 14; RUN: -ppc-asm-full-reg-names -target-abi=elfv2 -mcpu=pwr10 < %s | \ 15; RUN: FileCheck %s --check-prefixes=CHECK-BE 16 17define dso_local <2 x double> @testDoubleToDoubleFail() local_unnamed_addr { 18; CHECK-LE-LABEL: testDoubleToDoubleFail: 19; CHECK-LE: # %bb.0: # %entry 20; CHECK-LE-NEXT: xxsplti32dx vs34, 0, 1081435463 21; CHECK-LE-NEXT: xxsplti32dx vs34, 1, -1374389535 22; CHECK-LE-NEXT: blr 23; 24; CHECK-NOPCREL-BE-LABEL: testDoubleToDoubleFail: 25; CHECK-NOPCREL-BE: # %bb.0: # %entry 26; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs34, 0, 1081435463 27; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs34, 1, -1374389535 28; CHECK-NOPCREL-BE-NEXT: blr 29; 30; CHECK-NOPCREL-LE-LABEL: testDoubleToDoubleFail: 31; CHECK-NOPCREL-LE: # %bb.0: # %entry 32; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs34, 0, 1081435463 33; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs34, 1, -1374389535 34; CHECK-NOPCREL-LE-NEXT: blr 35; 36; CHECK-NOPREFIX-LABEL: testDoubleToDoubleFail: 37; CHECK-NOPREFIX: # %bb.0: # %entry 38; CHECK-NOPREFIX-NEXT: addis r3, r2, .LCPI0_0@toc@ha 39; CHECK-NOPREFIX-NEXT: addi r3, r3, .LCPI0_0@toc@l 40; CHECK-NOPREFIX-NEXT: lxv vs34, 0(r3) 41; CHECK-NOPREFIX-NEXT: blr 42; 43; CHECK-BE-LABEL: testDoubleToDoubleFail: 44; CHECK-BE: # %bb.0: # %entry 45; CHECK-BE-NEXT: xxsplti32dx vs34, 0, 1081435463 46; CHECK-BE-NEXT: xxsplti32dx vs34, 1, -1374389535 47; CHECK-BE-NEXT: blr 48entry: 49 ret <2 x double> <double 3.423300e+02, double 3.423300e+02> 50} 51 52define dso_local <2 x double> @testFloatDenormToDouble() local_unnamed_addr { 53; CHECK-LE-LABEL: testFloatDenormToDouble: 54; CHECK-LE: # %bb.0: # %entry 55; CHECK-LE-NEXT: xxsplti32dx vs34, 0, 940259579 56; CHECK-LE-NEXT: xxsplti32dx vs34, 1, -2147483648 57; CHECK-LE-NEXT: blr 58; 59; CHECK-NOPCREL-BE-LABEL: testFloatDenormToDouble: 60; CHECK-NOPCREL-BE: # %bb.0: # %entry 61; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs34, 0, 940259579 62; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs34, 1, -2147483648 63; CHECK-NOPCREL-BE-NEXT: blr 64; 65; CHECK-NOPCREL-LE-LABEL: testFloatDenormToDouble: 66; CHECK-NOPCREL-LE: # %bb.0: # %entry 67; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs34, 0, 940259579 68; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs34, 1, -2147483648 69; CHECK-NOPCREL-LE-NEXT: blr 70; 71; CHECK-NOPREFIX-LABEL: testFloatDenormToDouble: 72; CHECK-NOPREFIX: # %bb.0: # %entry 73; CHECK-NOPREFIX-NEXT: addis r3, r2, .LCPI1_0@toc@ha 74; CHECK-NOPREFIX-NEXT: addi r3, r3, .LCPI1_0@toc@l 75; CHECK-NOPREFIX-NEXT: lxv vs34, 0(r3) 76; CHECK-NOPREFIX-NEXT: blr 77; 78; CHECK-BE-LABEL: testFloatDenormToDouble: 79; CHECK-BE: # %bb.0: # %entry 80; CHECK-BE-NEXT: xxsplti32dx vs34, 0, 940259579 81; CHECK-BE-NEXT: xxsplti32dx vs34, 1, -2147483648 82; CHECK-BE-NEXT: blr 83entry: 84 ret <2 x double> <double 0x380B38FB80000000, double 0x380B38FB80000000> 85} 86 87define dso_local <2 x double> @testDoubleToDoubleNaNFail() local_unnamed_addr { 88; CHECK-LE-LABEL: testDoubleToDoubleNaNFail: 89; CHECK-LE: # %bb.0: # %entry 90; CHECK-LE-NEXT: xxsplti32dx vs34, 0, -1 91; CHECK-LE-NEXT: xxsplti32dx vs34, 1, -16 92; CHECK-LE-NEXT: blr 93; 94; CHECK-NOPCREL-BE-LABEL: testDoubleToDoubleNaNFail: 95; CHECK-NOPCREL-BE: # %bb.0: # %entry 96; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs34, 0, -1 97; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs34, 1, -16 98; CHECK-NOPCREL-BE-NEXT: blr 99; 100; CHECK-NOPCREL-LE-LABEL: testDoubleToDoubleNaNFail: 101; CHECK-NOPCREL-LE: # %bb.0: # %entry 102; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs34, 0, -1 103; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs34, 1, -16 104; CHECK-NOPCREL-LE-NEXT: blr 105; 106; CHECK-NOPREFIX-LABEL: testDoubleToDoubleNaNFail: 107; CHECK-NOPREFIX: # %bb.0: # %entry 108; CHECK-NOPREFIX-NEXT: addis r3, r2, .LCPI2_0@toc@ha 109; CHECK-NOPREFIX-NEXT: addi r3, r3, .LCPI2_0@toc@l 110; CHECK-NOPREFIX-NEXT: lxv vs34, 0(r3) 111; CHECK-NOPREFIX-NEXT: blr 112; 113; CHECK-BE-LABEL: testDoubleToDoubleNaNFail: 114; CHECK-BE: # %bb.0: # %entry 115; CHECK-BE-NEXT: xxsplti32dx vs34, 0, -1 116; CHECK-BE-NEXT: xxsplti32dx vs34, 1, -16 117; CHECK-BE-NEXT: blr 118entry: 119 ret <2 x double> <double 0xFFFFFFFFFFFFFFF0, double 0xFFFFFFFFFFFFFFF0> 120} 121 122define dso_local double @testDoubleNonRepresentableScalar() local_unnamed_addr { 123; CHECK-LE-LABEL: testDoubleNonRepresentableScalar: 124; CHECK-LE: # %bb.0: # %entry 125; CHECK-LE-NEXT: xxsplti32dx vs1, 0, 1081435463 126; CHECK-LE-NEXT: xxsplti32dx vs1, 1, -1374389535 127; CHECK-LE-NEXT: blr 128; 129; CHECK-NOPCREL-BE-LABEL: testDoubleNonRepresentableScalar: 130; CHECK-NOPCREL-BE: # %bb.0: # %entry 131; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs1, 0, 1081435463 132; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs1, 1, -1374389535 133; CHECK-NOPCREL-BE-NEXT: blr 134; 135; CHECK-NOPCREL-LE-LABEL: testDoubleNonRepresentableScalar: 136; CHECK-NOPCREL-LE: # %bb.0: # %entry 137; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs1, 0, 1081435463 138; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs1, 1, -1374389535 139; CHECK-NOPCREL-LE-NEXT: blr 140; 141; CHECK-NOPREFIX-LABEL: testDoubleNonRepresentableScalar: 142; CHECK-NOPREFIX: # %bb.0: # %entry 143; CHECK-NOPREFIX-NEXT: addis r3, r2, .LCPI3_0@toc@ha 144; CHECK-NOPREFIX-NEXT: lfd f1, .LCPI3_0@toc@l(r3) 145; CHECK-NOPREFIX-NEXT: blr 146; 147; CHECK-BE-LABEL: testDoubleNonRepresentableScalar: 148; CHECK-BE: # %bb.0: # %entry 149; CHECK-BE-NEXT: xxsplti32dx vs1, 0, 1081435463 150; CHECK-BE-NEXT: xxsplti32dx vs1, 1, -1374389535 151; CHECK-BE-NEXT: blr 152entry: 153 ret double 3.423300e+02 154} 155 156define dso_local float @testFloatDenormScalar() local_unnamed_addr { 157; CHECK-LE-LABEL: testFloatDenormScalar: 158; CHECK-LE: # %bb.0: # %entry 159; CHECK-LE-NEXT: xxsplti32dx vs1, 0, 940259579 160; CHECK-LE-NEXT: xxsplti32dx vs1, 1, -2147483648 161; CHECK-LE-NEXT: blr 162; 163; CHECK-NOPCREL-BE-LABEL: testFloatDenormScalar: 164; CHECK-NOPCREL-BE: # %bb.0: # %entry 165; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs1, 0, 940259579 166; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs1, 1, -2147483648 167; CHECK-NOPCREL-BE-NEXT: blr 168; 169; CHECK-NOPCREL-LE-LABEL: testFloatDenormScalar: 170; CHECK-NOPCREL-LE: # %bb.0: # %entry 171; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs1, 0, 940259579 172; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs1, 1, -2147483648 173; CHECK-NOPCREL-LE-NEXT: blr 174; 175; CHECK-NOPREFIX-LABEL: testFloatDenormScalar: 176; CHECK-NOPREFIX: # %bb.0: # %entry 177; CHECK-NOPREFIX-NEXT: addis r3, r2, .LCPI4_0@toc@ha 178; CHECK-NOPREFIX-NEXT: lfs f1, .LCPI4_0@toc@l(r3) 179; CHECK-NOPREFIX-NEXT: blr 180; 181; CHECK-BE-LABEL: testFloatDenormScalar: 182; CHECK-BE: # %bb.0: # %entry 183; CHECK-BE-NEXT: xxsplti32dx vs1, 0, 940259579 184; CHECK-BE-NEXT: xxsplti32dx vs1, 1, -2147483648 185; CHECK-BE-NEXT: blr 186entry: 187 ret float 0x380B38FB80000000 188} 189 190define dso_local double @testFloatDenormToDoubleScalar() local_unnamed_addr { 191; CHECK-LE-LABEL: testFloatDenormToDoubleScalar: 192; CHECK-LE: # %bb.0: # %entry 193; CHECK-LE-NEXT: xxsplti32dx vs1, 0, 940259579 194; CHECK-LE-NEXT: xxsplti32dx vs1, 1, -2147483648 195; CHECK-LE-NEXT: blr 196; 197; CHECK-NOPCREL-BE-LABEL: testFloatDenormToDoubleScalar: 198; CHECK-NOPCREL-BE: # %bb.0: # %entry 199; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs1, 0, 940259579 200; CHECK-NOPCREL-BE-NEXT: xxsplti32dx vs1, 1, -2147483648 201; CHECK-NOPCREL-BE-NEXT: blr 202; 203; CHECK-NOPCREL-LE-LABEL: testFloatDenormToDoubleScalar: 204; CHECK-NOPCREL-LE: # %bb.0: # %entry 205; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs1, 0, 940259579 206; CHECK-NOPCREL-LE-NEXT: xxsplti32dx vs1, 1, -2147483648 207; CHECK-NOPCREL-LE-NEXT: blr 208; 209; CHECK-NOPREFIX-LABEL: testFloatDenormToDoubleScalar: 210; CHECK-NOPREFIX: # %bb.0: # %entry 211; CHECK-NOPREFIX-NEXT: addis r3, r2, .LCPI5_0@toc@ha 212; CHECK-NOPREFIX-NEXT: lfs f1, .LCPI5_0@toc@l(r3) 213; CHECK-NOPREFIX-NEXT: blr 214; 215; CHECK-BE-LABEL: testFloatDenormToDoubleScalar: 216; CHECK-BE: # %bb.0: # %entry 217; CHECK-BE-NEXT: xxsplti32dx vs1, 0, 940259579 218; CHECK-BE-NEXT: xxsplti32dx vs1, 1, -2147483648 219; CHECK-BE-NEXT: blr 220entry: 221 ret double 0x380B38FB80000000 222} 223