; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S -passes=instcombine < %s | FileCheck %s ; Check that the redundant sequences of extract/insert are eliminated. ; extract.vector(insert.vector(Tuple, Value, Idx), Idx) --> Value define @test_extract_insert_same_idx( %v0, %v1) { ; CHECK-LABEL: @test_extract_insert_same_idx( ; CHECK-NEXT: ret [[V1:%.*]] ; %vec.ins = call @llvm.vector.insert.nxv64i8.nxv16i8( %v0, %v1, i64 48) %vec.ext = call @llvm.vector.extract.nxv16i8.nxv64i8( %vec.ins, i64 48) ret %vec.ext } ; extract.vector(insert.vector(Vector, Value, InsertIndex), ExtractIndex) ; --> extract.vector(Vector, ExtractIndex) define @test_extract_insert_dif_idx( %v0, %v1) { ; CHECK-LABEL: @test_extract_insert_dif_idx( ; CHECK-NEXT: [[VEC_EXT:%.*]] = call @llvm.vector.extract.nxv16i8.nxv64i8( [[V0:%.*]], i64 0) ; CHECK-NEXT: ret [[VEC_EXT]] ; %vec.ins = call @llvm.vector.insert.nxv64i8.nxv16i8( %v0, %v1, i64 48) %vec.ext = call @llvm.vector.extract.nxv16i8.nxv64i8( %vec.ins, i64 0) ret %vec.ext } ; Negative test ; The extracted vector-size != inserted vector-size define @neg_test_extract_insert_same_idx_dif_ret_size( %v0, %v1) { ; CHECK-LABEL: @neg_test_extract_insert_same_idx_dif_ret_size( ; CHECK-NEXT: [[VEC_INS:%.*]] = call @llvm.vector.insert.nxv64i8.nxv16i8( [[V0:%.*]], [[V1:%.*]], i64 32) ; CHECK-NEXT: [[VEC_EXT:%.*]] = call @llvm.vector.extract.nxv32i8.nxv64i8( [[VEC_INS]], i64 32) ; CHECK-NEXT: ret [[VEC_EXT]] ; %vec.ins = call @llvm.vector.insert.nxv64i8.nxv16i8( %v0, %v1, i64 32) %vec.ext = call @llvm.vector.extract.nxv32i8.nxv64i8( %vec.ins, i64 32) ret %vec.ext } declare @llvm.vector.insert.nxv64i8.nxv16i8(, , i64) declare @llvm.vector.extract.nxv16i8.nxv64i8(, i64) declare @llvm.vector.extract.nxv32i8.nxv64i8(, i64)