| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 | |
| ; RUN: opt -passes=sccp -S < %s | FileCheck %s | |
| define <32 x i8> @test_bitcast(i1 %cond) { | |
| ; CHECK-LABEL: define <32 x i8> @test_bitcast( | |
| ; CHECK-SAME: i1 [[COND:%.*]]) { | |
| ; CHECK-NEXT: [[ENTRY:.*]]: | |
| ; CHECK-NEXT: br label %[[FOR_COND2:.*]] | |
| ; CHECK: [[FOR_COND2]]: | |
| ; CHECK-NEXT: [[TMP0:%.*]] = phi <4 x i64> [ zeroinitializer, %[[ENTRY]] ], [ splat (i64 1), %[[FOR_COND2]] ] | |
| ; CHECK-NEXT: br i1 [[COND]], label %[[FOR_COND2]], label %[[IF_THEN:.*]] | |
| ; CHECK: [[IF_THEN]]: | |
| ; CHECK-NEXT: ret <32 x i8> zeroinitializer | |
| ; | |
| entry: | |
| br label %for.cond2 | |
| for.cond2: ; preds = %for.cond2, %entry | |
| %BS_VAR_1.0 = phi <4 x i64> [ <i64 poison, i64 poison, i64 poison, i64 0>, %entry ], [ zeroinitializer, %for.cond2 ] | |
| %0 = phi <4 x i64> [ zeroinitializer, %entry ], [ splat (i64 1), %for.cond2 ] | |
| br i1 %cond, label %for.cond2, label %if.then | |
| if.then: ; preds = %for.cond2 | |
| %sub = sub <4 x i64> <i64 poison, i64 poison, i64 poison, i64 0>, %BS_VAR_1.0 | |
| %and = and <4 x i64> %0, %sub | |
| %1 = bitcast <4 x i64> %and to <32 x i8> | |
| ret <32 x i8> %1 | |
| } | |
| define <4 x i64> @test_call(i1 %cond) { | |
| ; CHECK-LABEL: define <4 x i64> @test_call( | |
| ; CHECK-SAME: i1 [[COND:%.*]]) { | |
| ; CHECK-NEXT: [[ENTRY:.*]]: | |
| ; CHECK-NEXT: br label %[[FOR_COND2:.*]] | |
| ; CHECK: [[FOR_COND2]]: | |
| ; CHECK-NEXT: [[TMP0:%.*]] = phi <4 x i64> [ zeroinitializer, %[[ENTRY]] ], [ splat (i64 1), %[[FOR_COND2]] ] | |
| ; CHECK-NEXT: br i1 [[COND]], label %[[FOR_COND2]], label %[[IF_THEN:.*]] | |
| ; CHECK: [[IF_THEN]]: | |
| ; CHECK-NEXT: ret <4 x i64> zeroinitializer | |
| ; | |
| entry: | |
| br label %for.cond2 | |
| for.cond2: | |
| %BS_VAR_1.0 = phi <4 x i64> [ <i64 poison, i64 poison, i64 poison, i64 0>, %entry ], [ zeroinitializer, %for.cond2 ] | |
| %0 = phi <4 x i64> [ zeroinitializer, %entry ], [ splat (i64 1), %for.cond2 ] | |
| br i1 %cond, label %for.cond2, label %if.then | |
| if.then: | |
| %sub = sub <4 x i64> <i64 poison, i64 poison, i64 poison, i64 0>, %BS_VAR_1.0 | |
| %and = and <4 x i64> %0, %sub | |
| %r = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %and) | |
| ret <4 x i64> %r | |
| } | |
| @g = external global [16 x i8] | |
| define <4 x ptr> @test_gep(i1 %cond) { | |
| ; CHECK-LABEL: define <4 x ptr> @test_gep( | |
| ; CHECK-SAME: i1 [[COND:%.*]]) { | |
| ; CHECK-NEXT: [[ENTRY:.*]]: | |
| ; CHECK-NEXT: br label %[[FOR_COND2:.*]] | |
| ; CHECK: [[FOR_COND2]]: | |
| ; CHECK-NEXT: [[TMP0:%.*]] = phi <4 x i64> [ zeroinitializer, %[[ENTRY]] ], [ splat (i64 1), %[[FOR_COND2]] ] | |
| ; CHECK-NEXT: br i1 [[COND]], label %[[FOR_COND2]], label %[[IF_THEN:.*]] | |
| ; CHECK: [[IF_THEN]]: | |
| ; CHECK-NEXT: [[R:%.*]] = getelementptr i8, <4 x ptr> <ptr @g, ptr @g, ptr @g, ptr @g>, <4 x i64> zeroinitializer | |
| ; CHECK-NEXT: ret <4 x ptr> [[R]] | |
| ; | |
| entry: | |
| br label %for.cond2 | |
| for.cond2: | |
| %BS_VAR_1.0 = phi <4 x i64> [ <i64 poison, i64 poison, i64 poison, i64 0>, %entry ], [ zeroinitializer, %for.cond2 ] | |
| %0 = phi <4 x i64> [ zeroinitializer, %entry ], [ splat (i64 1), %for.cond2 ] | |
| br i1 %cond, label %for.cond2, label %if.then | |
| if.then: | |
| %sub = sub <4 x i64> <i64 poison, i64 poison, i64 poison, i64 0>, %BS_VAR_1.0 | |
| %and = and <4 x i64> %0, %sub | |
| %r = getelementptr i8, <4 x ptr> splat (ptr @g), <4 x i64> %and | |
| ret <4 x ptr> %r | |
| } |