1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=riscv64 -mattr=+v -verify-machineinstrs | FileCheck %s 3 4define void @foo_1(ptr nocapture noundef writeonly %t) { 5; CHECK-LABEL: foo_1: 6; CHECK: # %bb.0: # %entry 7; CHECK-NEXT: lui a1, %hi(.LCPI0_0) 8; CHECK-NEXT: addi a1, a1, %lo(.LCPI0_0) 9; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 10; CHECK-NEXT: vle32.v v8, (a1) 11; CHECK-NEXT: vse32.v v8, (a0) 12; CHECK-NEXT: ret 13entry: 14 store <4 x float> <float -2147483648.0, float -2147483520.0, float -2147483392.0, float -2147483264.0>, ptr %t, align 16 15 ret void 16} 17 18define void @foo_2(ptr nocapture noundef writeonly %t) { 19; CHECK-LABEL: foo_2: 20; CHECK: # %bb.0: # %entry 21; CHECK-NEXT: lui a1, %hi(.LCPI1_0) 22; CHECK-NEXT: addi a1, a1, %lo(.LCPI1_0) 23; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 24; CHECK-NEXT: vle32.v v8, (a1) 25; CHECK-NEXT: vse32.v v8, (a0) 26; CHECK-NEXT: ret 27entry: 28 store <4 x float> <float 2147483136.0, float 2147483264.0, float 2147483392.0, float 2147483520.0>, ptr %t, align 16 29 ret void 30} 31 32define void @foo_3(ptr nocapture noundef writeonly %t) { 33; CHECK-LABEL: foo_3: 34; CHECK: # %bb.0: # %entry 35; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 36; CHECK-NEXT: vid.v v8 37; CHECK-NEXT: vadd.vi v8, v8, -1 38; CHECK-NEXT: vfcvt.f.x.v v8, v8 39; CHECK-NEXT: vse32.v v8, (a0) 40; CHECK-NEXT: ret 41entry: 42 store <4 x float> <float -1.0, float 0.0, float 1.0, float 2.0>, ptr %t, align 16 43 ret void 44} 45 46define void @foo_4(ptr nocapture noundef writeonly %t) { 47; CHECK-LABEL: foo_4: 48; CHECK: # %bb.0: # %entry 49; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 50; CHECK-NEXT: vid.v v8 51; CHECK-NEXT: vsll.vi v8, v8, 10 52; CHECK-NEXT: vadd.vi v8, v8, -16 53; CHECK-NEXT: vfcvt.f.x.v v8, v8 54; CHECK-NEXT: vse32.v v8, (a0) 55; CHECK-NEXT: ret 56entry: 57 store <4 x float> <float -16.0, float 1008.0, float 2032.0, float 3056.0>, ptr %t, align 16 58 ret void 59} 60 61define void @foo_5(ptr nocapture noundef writeonly %t) { 62; CHECK-LABEL: foo_5: 63; CHECK: # %bb.0: # %entry 64; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 65; CHECK-NEXT: vid.v v8 66; CHECK-NEXT: vfcvt.f.x.v v8, v8 67; CHECK-NEXT: vse32.v v8, (a0) 68; CHECK-NEXT: ret 69entry: 70 store <4 x float> <float 0.0, float 1.0, float 2.0, float 3.0>, ptr %t, align 16 71 ret void 72} 73 74define void @foo_6(ptr nocapture noundef writeonly %t) { 75; CHECK-LABEL: foo_6: 76; CHECK: # %bb.0: # %entry 77; CHECK-NEXT: lui a1, %hi(.LCPI5_0) 78; CHECK-NEXT: addi a1, a1, %lo(.LCPI5_0) 79; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 80; CHECK-NEXT: vle32.v v8, (a1) 81; CHECK-NEXT: vse32.v v8, (a0) 82; CHECK-NEXT: ret 83entry: 84 store <4 x float> <float -0.0, float 1.0, float 2.0, float 3.0>, ptr %t, align 16 85 ret void 86} 87 88define void @foo_7(ptr nocapture noundef writeonly %t) { 89; CHECK-LABEL: foo_7: 90; CHECK: # %bb.0: # %entry 91; CHECK-NEXT: lui a1, %hi(.LCPI6_0) 92; CHECK-NEXT: addi a1, a1, %lo(.LCPI6_0) 93; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 94; CHECK-NEXT: vle32.v v8, (a1) 95; CHECK-NEXT: vse32.v v8, (a0) 96; CHECK-NEXT: ret 97entry: 98 store <4 x float> <float -3.0, float -2.0, float -1.0, float -0.0>, ptr %t, align 16 99 ret void 100} 101 102define void @foo_8(ptr nocapture noundef writeonly %t) { 103; CHECK-LABEL: foo_8: 104; CHECK: # %bb.0: # %entry 105; CHECK-NEXT: lui a1, %hi(.LCPI7_0) 106; CHECK-NEXT: addi a1, a1, %lo(.LCPI7_0) 107; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 108; CHECK-NEXT: vle32.v v8, (a1) 109; CHECK-NEXT: vse32.v v8, (a0) 110; CHECK-NEXT: ret 111entry: 112 store <4 x float> <float 1.5, float 2.5, float 3.5, float 4.5>, ptr %t, align 16 113 ret void 114} 115 116; Make sure we don't try to use vid+vsll+vfcvt. We previously flipped the sign 117; of 2147483648.0. 118define void @foo_9(ptr nocapture noundef writeonly %t) { 119; CHECK-LABEL: foo_9: 120; CHECK: # %bb.0: # %entry 121; CHECK-NEXT: lui a1, %hi(.LCPI8_0) 122; CHECK-NEXT: addi a1, a1, %lo(.LCPI8_0) 123; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 124; CHECK-NEXT: vle32.v v8, (a1) 125; CHECK-NEXT: vse32.v v8, (a0) 126; CHECK-NEXT: ret 127entry: 128 store <4 x float> <float 0.0, float -2147483648.0, float 0.0, float 2147483648.0>, ptr %t, align 16 129 ret void 130} 131