; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -passes=instsimplify -S | FileCheck %s define @rev_of_rev( %a, i32 %evl) { ; CHECK-LABEL: @rev_of_rev( ; CHECK-NEXT: ret [[A:%.*]] ; %a.rev = tail call @llvm.experimental.vp.reverse( %a, splat (i1 true), i32 %evl) %res = tail call @llvm.experimental.vp.reverse( %a.rev, splat (i1 true), i32 %evl) ret %res } define @rev_of_rev_diffevl( %a, i32 %evl) { ; CHECK-LABEL: @rev_of_rev_diffevl( ; CHECK-NEXT: [[A_REV:%.*]] = tail call @llvm.experimental.vp.reverse.nxv4i32( [[A:%.*]], splat (i1 true), i32 [[EVL:%.*]]) ; CHECK-NEXT: [[RES:%.*]] = tail call @llvm.experimental.vp.reverse.nxv4i32( [[A_REV]], splat (i1 true), i32 10) ; CHECK-NEXT: ret [[RES]] ; %a.rev = tail call @llvm.experimental.vp.reverse( %a, splat (i1 true), i32 %evl) %res = tail call @llvm.experimental.vp.reverse( %a.rev, splat (i1 true), i32 10) ret %res } define @rev_of_poison(i32 %evl) { ; CHECK-LABEL: @rev_of_poison( ; CHECK-NEXT: ret poison ; %rev = tail call @llvm.experimental.vp.reverse( poison, splat (i1 true), i32 %evl) ret %rev } define @rev_of_undef(i32 %evl) { ; CHECK-LABEL: @rev_of_undef( ; CHECK-NEXT: ret undef ; %rev = tail call @llvm.experimental.vp.reverse( undef, splat (i1 true), i32 %evl) ret %rev } define @rev_of_zero(i32 %evl) { ; CHECK-LABEL: @rev_of_zero( ; CHECK-NEXT: ret zeroinitializer ; %rev = tail call @llvm.experimental.vp.reverse( zeroinitializer, splat (i1 true), i32 %evl) ret %rev } define @rev_of_splat(i32 %a, i32 %evl) { ; CHECK-LABEL: @rev_of_splat( ; CHECK-NEXT: [[A_INS:%.*]] = insertelement poison, i32 [[A:%.*]], i32 0 ; CHECK-NEXT: [[A_VEC:%.*]] = shufflevector [[A_INS]], poison, zeroinitializer ; CHECK-NEXT: ret [[A_VEC]] ; %a.ins = insertelement poison, i32 %a, i32 0 %a.vec = shufflevector %a.ins, poison, zeroinitializer %rev = tail call @llvm.experimental.vp.reverse( %a.vec, splat (i1 true), i32 %evl) ret %rev } define @rev_of_splat2(i32 %a, %m, i32 %evl) { ; CHECK-LABEL: @rev_of_splat2( ; CHECK-NEXT: [[A_INS:%.*]] = insertelement poison, i32 [[A:%.*]], i32 0 ; CHECK-NEXT: [[A_VEC:%.*]] = shufflevector [[A_INS]], poison, zeroinitializer ; CHECK-NEXT: ret [[A_VEC]] ; %a.ins = insertelement poison, i32 %a, i32 0 %a.vec = shufflevector %a.ins, poison, zeroinitializer %rev = tail call @llvm.experimental.vp.reverse( %a.vec, %m, i32 %evl) ret %rev }