| ; NOTE: Assertions have been autogenerated by utils/update_llubi_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llubi --verbose < %s 2>&1 | FileCheck %s |
| |
| define void @main() { |
| %insert = insertelement <4 x i32> poison, i32 42, i32 0 |
| %splat = shufflevector <4 x i32> %insert, <4 x i32> poison, <4 x i32> zeroinitializer |
| %extract = extractelement <4 x i32> %splat, i32 3 |
| |
| %insert_poison = insertelement <4 x i32> zeroinitializer, i32 42, i32 5 |
| %extract_poison = extractelement <4 x i32> zeroinitializer, i32 5 |
| |
| %scalable_insert = insertelement <vscale x 4 x i32> poison, i32 42, i32 0 |
| %scalable_splat = shufflevector <vscale x 4 x i32> %scalable_insert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer |
| %scalable_extract = extractelement <vscale x 4 x i32> %scalable_splat, i32 3 |
| |
| %insert_update = insertelement <4 x i32> <i32 0, i32 poison, i32 2, i32 3>, i32 1, i32 1 |
| %shuffle_mixed = shufflevector <4 x i32> <i32 0, i32 poison, i32 2, i32 3>, <4 x i32> <i32 4, i32 5, i32 6, i32 7>, <4 x i32> <i32 7, i32 1, i32 poison, i32 0> |
| %shuffle_mismatch = shufflevector <4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32> <i32 4, i32 5, i32 6, i32 7>, <3 x i32> <i32 7, i32 poison, i32 3> |
| |
| ret void |
| } |
| ; CHECK: Entering function: main |
| ; CHECK-NEXT: %insert = insertelement <4 x i32> poison, i32 42, i32 0 => { i32 42, poison, poison, poison } |
| ; CHECK-NEXT: %splat = shufflevector <4 x i32> %insert, <4 x i32> poison, <4 x i32> zeroinitializer => { i32 42, i32 42, i32 42, i32 42 } |
| ; CHECK-NEXT: %extract = extractelement <4 x i32> %splat, i32 3 => i32 42 |
| ; CHECK-NEXT: %insert_poison = insertelement <4 x i32> zeroinitializer, i32 42, i32 5 => { poison, poison, poison, poison } |
| ; CHECK-NEXT: %extract_poison = extractelement <4 x i32> zeroinitializer, i32 5 => poison |
| ; CHECK-NEXT: %scalable_insert = insertelement <vscale x 4 x i32> poison, i32 42, i32 0 => { i32 42, poison, poison, poison, poison, poison, poison, poison, poison, poison, poison, poison, poison, poison, poison, poison } |
| ; CHECK-NEXT: %scalable_splat = shufflevector <vscale x 4 x i32> %scalable_insert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer => { i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42 } |
| ; CHECK-NEXT: %scalable_extract = extractelement <vscale x 4 x i32> %scalable_splat, i32 3 => i32 42 |
| ; CHECK-NEXT: %insert_update = insertelement <4 x i32> <i32 0, i32 poison, i32 2, i32 3>, i32 1, i32 1 => { i32 0, i32 1, i32 2, i32 3 } |
| ; CHECK-NEXT: %shuffle_mixed = shufflevector <4 x i32> <i32 0, i32 poison, i32 2, i32 3>, <4 x i32> <i32 4, i32 5, i32 6, i32 7>, <4 x i32> <i32 7, i32 1, i32 poison, i32 0> => { i32 7, poison, poison, i32 0 } |
| ; CHECK-NEXT: %shuffle_mismatch = shufflevector <4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32> <i32 4, i32 5, i32 6, i32 7>, <3 x i32> <i32 7, i32 poison, i32 3> => { i32 7, poison, i32 3 } |
| ; CHECK-NEXT: ret void |
| ; CHECK-NEXT: Exiting function: main |