1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-linux-gnu -O3 < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; This test verifies that VSX swap optimization works when an implicit 4*9880d681SAndroid Build Coastguard Worker; subregister is present (in this case, in the XXPERMDI associated with 5*9880d681SAndroid Build Coastguard Worker; the store). 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @bar() { 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker %x = alloca <2 x i64>, align 16 10*9880d681SAndroid Build Coastguard Worker %0 = bitcast <2 x i64>* %x to i8* 11*9880d681SAndroid Build Coastguard Worker call void @llvm.lifetime.start(i64 16, i8* %0) 12*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds <2 x i64>, <2 x i64>* %x, i64 0, i64 0 13*9880d681SAndroid Build Coastguard Worker store <2 x i64> <i64 0, i64 1>, <2 x i64>* %x, align 16 14*9880d681SAndroid Build Coastguard Worker call void @foo(i64* %arrayidx) 15*9880d681SAndroid Build Coastguard Worker call void @llvm.lifetime.end(i64 16, i8* %0) 16*9880d681SAndroid Build Coastguard Worker ret void 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bar 20*9880d681SAndroid Build Coastguard Worker; CHECK: lxvd2x 21*9880d681SAndroid Build Coastguard Worker; CHECK: stxvd2x 22*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: xxswapd 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.lifetime.start(i64, i8* nocapture) 25*9880d681SAndroid Build Coastguard Workerdeclare void @foo(i64*) 26*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.lifetime.end(i64, i8* nocapture) 27*9880d681SAndroid Build Coastguard Worker 28