149 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt < %s -passes="print<cost-model>" -cost-kind=all 2>&1 -disable-output -mtriple=armv7-linux-gnueabihf -mcpu=cortex-a9 | FileCheck --check-prefix=COST %s3 4; To see the assembly output: llc -mcpu=cortex-a9 < %s | FileCheck --check-prefix=ASM %s5; ASM lines below are only for reference, tests on that direction should go to tests/CodeGen/ARM6 7; ModuleID = 'arm.ll'8target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:64-n32-S64"9target triple = "armv7--linux-gnueabihf"10 11%T216 = type <2 x i16>12%T232 = type <2 x i32>13%T264 = type <2 x i64>14 15%T416 = type <4 x i16>16%T432 = type <4 x i32>17%T464 = type <4 x i64>18 19define void @direct(ptr %loadaddr, ptr %loadaddr2, ptr %storeaddr) {20; COST-LABEL: 'direct'21; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v0 = load <4 x i32>, ptr %loadaddr, align 822; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v1 = load <4 x i32>, ptr %loadaddr2, align 823; COST-NEXT: Cost Model: Found costs of 1 for: %r3 = sub <4 x i32> %v0, %v124; COST-NEXT: Cost Model: Found costs of 1 for: store <4 x i32> %r3, ptr %storeaddr, align 825; COST-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void26;27 %v0 = load %T432, ptr %loadaddr28; ASM: vld1.6429 %v1 = load %T432, ptr %loadaddr230; ASM: vld1.6431 %r3 = sub %T432 %v0, %v132; ASM: vsub.i3233 store %T432 %r3, ptr %storeaddr34; ASM: vst1.6435 ret void36}37 38define void @ups1632(ptr %loadaddr, ptr %loadaddr2, ptr %storeaddr) {39; COST-LABEL: 'ups1632'40; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v0 = load <4 x i16>, ptr %loadaddr, align 841; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v1 = load <4 x i16>, ptr %loadaddr2, align 842; COST-NEXT: Cost Model: Found costs of 0 for: %r1 = sext <4 x i16> %v0 to <4 x i32>43; COST-NEXT: Cost Model: Found costs of 0 for: %r2 = sext <4 x i16> %v1 to <4 x i32>44; COST-NEXT: Cost Model: Found costs of 1 for: %r3 = sub <4 x i32> %r1, %r245; COST-NEXT: Cost Model: Found costs of 1 for: store <4 x i32> %r3, ptr %storeaddr, align 846; COST-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void47;48 %v0 = load %T416, ptr %loadaddr49; ASM: vldr50 %v1 = load %T416, ptr %loadaddr251; ASM: vldr52 %r1 = sext %T416 %v0 to %T43253 %r2 = sext %T416 %v1 to %T43254 %r3 = sub %T432 %r1, %r255; ASM: vsubl.s1656 store %T432 %r3, ptr %storeaddr57; ASM: vst1.6458 ret void59}60 61define void @upu1632(ptr %loadaddr, ptr %loadaddr2, ptr %storeaddr) {62; COST-LABEL: 'upu1632'63; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v0 = load <4 x i16>, ptr %loadaddr, align 864; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v1 = load <4 x i16>, ptr %loadaddr2, align 865; COST-NEXT: Cost Model: Found costs of 0 for: %r1 = zext <4 x i16> %v0 to <4 x i32>66; COST-NEXT: Cost Model: Found costs of 0 for: %r2 = zext <4 x i16> %v1 to <4 x i32>67; COST-NEXT: Cost Model: Found costs of 1 for: %r3 = sub <4 x i32> %r1, %r268; COST-NEXT: Cost Model: Found costs of 1 for: store <4 x i32> %r3, ptr %storeaddr, align 869; COST-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void70;71 %v0 = load %T416, ptr %loadaddr72; ASM: vldr73 %v1 = load %T416, ptr %loadaddr274; ASM: vldr75 %r1 = zext %T416 %v0 to %T43276 %r2 = zext %T416 %v1 to %T43277 %r3 = sub %T432 %r1, %r278; ASM: vsubl.u1679 store %T432 %r3, ptr %storeaddr80; ASM: vst1.6481 ret void82}83 84define void @ups3264(ptr %loadaddr, ptr %loadaddr2, ptr %storeaddr) {85; COST-LABEL: 'ups3264'86; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v0 = load <2 x i32>, ptr %loadaddr, align 887; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v1 = load <2 x i32>, ptr %loadaddr2, align 888; COST-NEXT: Cost Model: Found costs of 1 for: %r3 = sub <2 x i32> %v0, %v189; COST-NEXT: Cost Model: Found costs of 1 for: %st = sext <2 x i32> %r3 to <2 x i64>90; COST-NEXT: Cost Model: Found costs of 1 for: store <2 x i64> %st, ptr %storeaddr, align 891; COST-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void92;93 %v0 = load %T232, ptr %loadaddr94; ASM: vldr95 %v1 = load %T232, ptr %loadaddr296; ASM: vldr97 %r3 = sub %T232 %v0, %v198; ASM: vsub.i3299 %st = sext %T232 %r3 to %T264100; ASM: vmovl.s32101 store %T264 %st, ptr %storeaddr102; ASM: vst1.64103 ret void104}105 106define void @upu3264(ptr %loadaddr, ptr %loadaddr2, ptr %storeaddr) {107; COST-LABEL: 'upu3264'108; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v0 = load <2 x i32>, ptr %loadaddr, align 8109; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v1 = load <2 x i32>, ptr %loadaddr2, align 8110; COST-NEXT: Cost Model: Found costs of 1 for: %r3 = sub <2 x i32> %v0, %v1111; COST-NEXT: Cost Model: Found costs of 1 for: %st = zext <2 x i32> %r3 to <2 x i64>112; COST-NEXT: Cost Model: Found costs of 1 for: store <2 x i64> %st, ptr %storeaddr, align 8113; COST-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void114;115 %v0 = load %T232, ptr %loadaddr116; ASM: vldr117 %v1 = load %T232, ptr %loadaddr2118; ASM: vldr119 %r3 = sub %T232 %v0, %v1120; ASM: vsub.i32121 %st = zext %T232 %r3 to %T264122; ASM: vmovl.u32123 store %T264 %st, ptr %storeaddr124; ASM: vst1.64125 ret void126}127 128define void @dn3216(ptr %loadaddr, ptr %loadaddr2, ptr %storeaddr) {129; COST-LABEL: 'dn3216'130; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v0 = load <4 x i32>, ptr %loadaddr, align 8131; COST-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v1 = load <4 x i32>, ptr %loadaddr2, align 8132; COST-NEXT: Cost Model: Found costs of 1 for: %r3 = sub <4 x i32> %v0, %v1133; COST-NEXT: Cost Model: Found costs of 1 for: %st = trunc <4 x i32> %r3 to <4 x i16>134; COST-NEXT: Cost Model: Found costs of 1 for: store <4 x i16> %st, ptr %storeaddr, align 8135; COST-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void136;137 %v0 = load %T432, ptr %loadaddr138; ASM: vld1.64139 %v1 = load %T432, ptr %loadaddr2140; ASM: vld1.64141 %r3 = sub %T432 %v0, %v1142; ASM: vsub.i32143 %st = trunc %T432 %r3 to %T416144; ASM: vmovn.i32145 store %T416 %st, ptr %storeaddr146; ASM: vstr147 ret void148}149