forked from OSchip/llvm-project
[InstCombine] add tests for extractelt of bitcasted scalar; NFC
This commit is contained in:
parent
019041bec3
commit
bd2c6e52bb
|
@ -1,6 +1,6 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -instcombine -S -data-layout="e" | FileCheck %s --check-prefixes=ANY,LE
|
||||
; RUN: opt < %s -instcombine -S -data-layout="E" | FileCheck %s --check-prefixes=ANY,BE
|
||||
; RUN: opt < %s -instcombine -S -data-layout="e-n64" | FileCheck %s --check-prefixes=ANY,LE
|
||||
; RUN: opt < %s -instcombine -S -data-layout="E-n64" | FileCheck %s --check-prefixes=ANY,BE
|
||||
|
||||
define i32 @extractelement_out_of_range(<2 x i32> %x) {
|
||||
; ANY-LABEL: @extractelement_out_of_range(
|
||||
|
@ -329,3 +329,93 @@ define <4 x double> @invalid_extractelement(<2 x double> %a, <4 x double> %b, do
|
|||
%r = insertelement <4 x double> %t4, double %e1, i64 0
|
||||
ret <4 x double> %r
|
||||
}
|
||||
|
||||
define i8 @bitcast_scalar_supported_type_index0(i32 %x) {
|
||||
; ANY-LABEL: @bitcast_scalar_supported_type_index0(
|
||||
; ANY-NEXT: [[V:%.*]] = bitcast i32 [[X:%.*]] to <4 x i8>
|
||||
; ANY-NEXT: [[R:%.*]] = extractelement <4 x i8> [[V]], i8 0
|
||||
; ANY-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%v = bitcast i32 %x to <4 x i8>
|
||||
%r = extractelement <4 x i8> %v, i8 0
|
||||
ret i8 %r
|
||||
}
|
||||
|
||||
define i8 @bitcast_scalar_supported_type_index2(i32 %x) {
|
||||
; ANY-LABEL: @bitcast_scalar_supported_type_index2(
|
||||
; ANY-NEXT: [[V:%.*]] = bitcast i32 [[X:%.*]] to <4 x i8>
|
||||
; ANY-NEXT: [[R:%.*]] = extractelement <4 x i8> [[V]], i64 2
|
||||
; ANY-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%v = bitcast i32 %x to <4 x i8>
|
||||
%r = extractelement <4 x i8> %v, i64 2
|
||||
ret i8 %r
|
||||
}
|
||||
|
||||
define i4 @bitcast_scalar_legal_type_index3(i64 %x) {
|
||||
; ANY-LABEL: @bitcast_scalar_legal_type_index3(
|
||||
; ANY-NEXT: [[V:%.*]] = bitcast i64 [[X:%.*]] to <16 x i4>
|
||||
; ANY-NEXT: [[R:%.*]] = extractelement <16 x i4> [[V]], i64 3
|
||||
; ANY-NEXT: ret i4 [[R]]
|
||||
;
|
||||
%v = bitcast i64 %x to <16 x i4>
|
||||
%r = extractelement <16 x i4> %v, i64 3
|
||||
ret i4 %r
|
||||
}
|
||||
|
||||
define i8 @bitcast_scalar_illegal_type_index1(i128 %x) {
|
||||
; ANY-LABEL: @bitcast_scalar_illegal_type_index1(
|
||||
; ANY-NEXT: [[V:%.*]] = bitcast i128 [[X:%.*]] to <16 x i8>
|
||||
; ANY-NEXT: [[R:%.*]] = extractelement <16 x i8> [[V]], i64 1
|
||||
; ANY-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%v = bitcast i128 %x to <16 x i8>
|
||||
%r = extractelement <16 x i8> %v, i64 1
|
||||
ret i8 %r
|
||||
}
|
||||
|
||||
define i8 @bitcast_fp_index0(float %x) {
|
||||
; ANY-LABEL: @bitcast_fp_index0(
|
||||
; ANY-NEXT: [[V:%.*]] = bitcast float [[X:%.*]] to <4 x i8>
|
||||
; ANY-NEXT: [[R:%.*]] = extractelement <4 x i8> [[V]], i8 0
|
||||
; ANY-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%v = bitcast float %x to <4 x i8>
|
||||
%r = extractelement <4 x i8> %v, i8 0
|
||||
ret i8 %r
|
||||
}
|
||||
|
||||
define half @bitcast_fpvec_index0(i32 %x) {
|
||||
; ANY-LABEL: @bitcast_fpvec_index0(
|
||||
; ANY-NEXT: [[V:%.*]] = bitcast i32 [[X:%.*]] to <2 x half>
|
||||
; ANY-NEXT: [[R:%.*]] = extractelement <2 x half> [[V]], i8 0
|
||||
; ANY-NEXT: ret half [[R]]
|
||||
;
|
||||
%v = bitcast i32 %x to <2 x half>
|
||||
%r = extractelement <2 x half> %v, i8 0
|
||||
ret half %r
|
||||
}
|
||||
|
||||
define i8 @bitcast_scalar_index_variable(i32 %x, i64 %y) {
|
||||
; ANY-LABEL: @bitcast_scalar_index_variable(
|
||||
; ANY-NEXT: [[V:%.*]] = bitcast i32 [[X:%.*]] to <4 x i8>
|
||||
; ANY-NEXT: [[R:%.*]] = extractelement <4 x i8> [[V]], i64 [[Y:%.*]]
|
||||
; ANY-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%v = bitcast i32 %x to <4 x i8>
|
||||
%r = extractelement <4 x i8> %v, i64 %y
|
||||
ret i8 %r
|
||||
}
|
||||
|
||||
define i8 @bitcast_scalar_index0_use(i64 %x) {
|
||||
; ANY-LABEL: @bitcast_scalar_index0_use(
|
||||
; ANY-NEXT: [[V:%.*]] = bitcast i64 [[X:%.*]] to <8 x i8>
|
||||
; ANY-NEXT: call void @use(<8 x i8> [[V]])
|
||||
; ANY-NEXT: [[R:%.*]] = extractelement <8 x i8> [[V]], i64 0
|
||||
; ANY-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%v = bitcast i64 %x to <8 x i8>
|
||||
call void @use(<8 x i8> %v)
|
||||
%r = extractelement <8 x i8> %v, i64 0
|
||||
ret i8 %r
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue