1# RUN: llc -mtriple=thumbv7 -start-before=if-converter %s -o - | FileCheck %s 2 3--- | 4 ; ModuleID = 'vdup-test.ll' 5 source_filename = "vdup-test.ll" 6 target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" 7 target triple = "thumbv7" 8 9 define arm_aapcs_vfpcc <2 x i32> @NeonVdupMul(i32 %scalar, i32 %N, <2 x i32> %vector) { 10 entry: 11 %cmp = icmp ne i32 %N, 0 12 %broadcast = insertelement <2 x i32> undef, i32 %scalar, i32 0 13 %dup = shufflevector <2 x i32> %broadcast, <2 x i32> undef, <2 x i32> zeroinitializer 14 %mul = mul <2 x i32> %dup, %vector 15 br i1 %cmp, label %select.end, label %select.false 16 17 select.false: ; preds = %entry 18 br label %select.end 19 20 select.end: ; preds = %entry, %select.false 21 %res = phi <2 x i32> [ %mul, %entry ], [ %vector, %select.false ] 22 ret <2 x i32> %res 23 } 24 25... 26--- 27name: NeonVdupMul 28alignment: 2 29exposesReturnsTwice: false 30legalized: false 31regBankSelected: false 32selected: false 33failedISel: false 34tracksRegLiveness: true 35hasWinCFI: false 36registers: [] 37liveins: 38 - { reg: '$r0', virtual-reg: '' } 39 - { reg: '$r1', virtual-reg: '' } 40 - { reg: '$d0', virtual-reg: '' } 41frameInfo: 42 isFrameAddressTaken: false 43 isReturnAddressTaken: false 44 hasStackMap: false 45 hasPatchPoint: false 46 stackSize: 0 47 offsetAdjustment: 0 48 maxAlignment: 1 49 adjustsStack: false 50 hasCalls: false 51 stackProtector: '' 52 maxCallFrameSize: 0 53 cvBytesOfCalleeSavedRegisters: 0 54 hasOpaqueSPAdjustment: false 55 hasVAStart: false 56 hasMustTailInVarArgFunc: false 57 localFrameSize: 0 58 savePoint: '' 59 restorePoint: '' 60fixedStack: [] 61stack: [] 62callSites: [] 63constants: [] 64machineFunctionInfo: {} 65body: | 66 bb.0.entry: 67 successors: %bb.1(0x50000000), %bb.2(0x30000000) 68 liveins: $d0, $r0, $r1 69 70 t2CMPri killed renamable $r1, 0, 14, $noreg, implicit-def $cpsr 71 t2Bcc %bb.2, 0, killed $cpsr 72 73 bb.1: 74 successors: %bb.2(0x80000000) 75 liveins: $d0, $r0 76 77 renamable $d16 = VDUP32d killed renamable $r0, 14, $noreg 78 ; Verify that the neon instructions haven't been conditionalized: 79 ; CHECK-LABEL: NeonVdupMul 80 ; CHECK: vdup.32 81 ; CHECK: vmul.i32 82 renamable $d0 = VMULv2i32 killed renamable $d16, killed renamable $d0, 14, $noreg 83 84 bb.2.select.end: 85 liveins: $d0 86 87 tBX_RET 14, $noreg, implicit $d0 88 89... 90