; RUN: opt < %s -instcombine -S | FileCheck %s target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64" target triple = "powerpc64le-unknown-linux-gnu" define <16 x i8> @foo() nounwind ssp { ; CHECK: @foo ;; Arguments are {0,1,...,15},{16,17,...,31},{30,28,26,...,0} %1 = call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> , <4 x i32> , <16 x i8> ) %2 = bitcast <4 x i32> %1 to <16 x i8> ret <16 x i8> %2 ;; Revised arguments are {16,17,...31},{0,1,...,15},{1,3,5,...,31} ;; optimized into the following: ; CHECK: ret <16 x i8> } declare <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32>, <4 x i32>, <16 x i8>)