| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt -passes='require<profile-summary>,function(codegenprepare)' -mtriple=aarch64-unknown-linux-gnu -S < %s | FileCheck %s |
| |
| ; Test extracting a value from an aggregate type followed by a bitcast. |
| define <2 x i32> @test_aggregate_src({ i64, i64 } %agg) { |
| ; CHECK-LABEL: define <2 x i32> @test_aggregate_src( |
| ; CHECK-SAME: { i64, i64 } [[AGG:%.*]]) { |
| ; CHECK-NEXT: [[ENTRY:.*:]] |
| ; CHECK-NEXT: [[VAL:%.*]] = extractvalue { i64, i64 } [[AGG]], 0 |
| ; CHECK-NEXT: [[ISZERO:%.*]] = icmp eq i64 [[VAL]], 0 |
| ; CHECK-NEXT: br i1 [[ISZERO]], label %[[EXIT:.*]], label %[[REDUCTION:.*]] |
| ; CHECK: [[REDUCTION]]: |
| ; CHECK-NEXT: [[BC:%.*]] = bitcast i64 [[VAL]] to <2 x i32> |
| ; CHECK-NEXT: ret <2 x i32> [[BC]] |
| ; CHECK: [[EXIT]]: |
| ; CHECK-NEXT: ret <2 x i32> zeroinitializer |
| ; |
| entry: |
| %val = extractvalue { i64, i64 } %agg, 0 |
| %iszero = icmp eq i64 %val, 0 |
| br i1 %iszero, label %exit, label %reduction |
| |
| reduction: |
| %bc = bitcast i64 %val to <2 x i32> |
| ret <2 x i32> %bc |
| |
| exit: |
| ret <2 x i32> zeroinitializer |
| } |
| |
| define <4 x i32> @test_aggregate_src_128({ i128, i128 } %agg) { |
| ; CHECK-LABEL: define <4 x i32> @test_aggregate_src_128( |
| ; CHECK-SAME: { i128, i128 } [[AGG:%.*]]) { |
| ; CHECK-NEXT: [[ENTRY:.*:]] |
| ; CHECK-NEXT: [[VAL:%.*]] = extractvalue { i128, i128 } [[AGG]], 0 |
| ; CHECK-NEXT: [[BC:%.*]] = bitcast i128 [[VAL]] to <4 x i32> |
| ; CHECK-NEXT: [[ISZERO:%.*]] = icmp eq i128 [[VAL]], 0 |
| ; CHECK-NEXT: br i1 [[ISZERO]], label %[[EXIT:.*]], label %[[REDUCTION:.*]] |
| ; CHECK: [[REDUCTION]]: |
| ; CHECK-NEXT: ret <4 x i32> [[BC]] |
| ; CHECK: [[EXIT]]: |
| ; CHECK-NEXT: ret <4 x i32> zeroinitializer |
| ; |
| entry: |
| %val = extractvalue { i128, i128 } %agg, 0 |
| %iszero = icmp eq i128 %val, 0 |
| br i1 %iszero, label %exit, label %reduction |
| |
| reduction: |
| %bc = bitcast i128 %val to <4 x i32> |
| ret <4 x i32> %bc |
| |
| exit: |
| ret <4 x i32> zeroinitializer |
| } |