blob: 7f2e08e21c5a779bd97cd86cb261c688ab873f60 [file] [edit]
; 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
}