| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- ; RUN: opt -scalarrepl -S < %s | FileCheck %s
- target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
- target triple = "x86_64-unknown-linux-gnu"
- declare void @llvm.lifetime.start(i64, i8*)
- declare void @llvm.lifetime.end(i64, i8*)
- %t1 = type {i32, i32, i32}
- define void @test1() {
- ; CHECK-LABEL: @test1(
- %A = alloca %t1
- %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0
- %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1
- %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2
- %B = bitcast i32* %A1 to i8*
- store i32 0, i32* %A1
- call void @llvm.lifetime.start(i64 -1, i8* %B)
- ret void
- ; CHECK-NEXT: ret void
- }
- define void @test2() {
- ; CHECK-LABEL: @test2(
- %A = alloca %t1
- %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0
- %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1
- %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2
- %B = bitcast i32* %A2 to i8*
- store i32 0, i32* %A2
- call void @llvm.lifetime.start(i64 -1, i8* %B)
- %C = load i32, i32* %A2
- ret void
- ; CHECK: ret void
- }
- define void @test3() {
- ; CHECK-LABEL: @test3(
- %A = alloca %t1
- %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0
- %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1
- %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2
- %B = bitcast i32* %A2 to i8*
- store i32 0, i32* %A2
- call void @llvm.lifetime.start(i64 6, i8* %B)
- %C = load i32, i32* %A2
- ret void
- ; CHECK-NEXT: ret void
- }
- define void @test4() {
- ; CHECK-LABEL: @test4(
- %A = alloca %t1
- %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0
- %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1
- %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2
- %B = bitcast i32* %A2 to i8*
- store i32 0, i32* %A2
- call void @llvm.lifetime.start(i64 1, i8* %B)
- %C = load i32, i32* %A2
- ret void
- ; CHECK-NEXT: ret void
- }
- %t2 = type {i32, [4 x i8], i32}
- define void @test5() {
- ; CHECK-LABEL: @test5(
- %A = alloca %t2
- ; CHECK: alloca{{.*}}i8
- ; CHECK: alloca{{.*}}i8
- ; CHECK: alloca{{.*}}i8
- %A21 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 0
- %A22 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 1
- %A23 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 2
- %A24 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 3
- ; CHECK-NOT: store i8 1
- store i8 1, i8* %A21
- store i8 2, i8* %A22
- store i8 3, i8* %A23
- store i8 4, i8* %A24
- %A1 = getelementptr %t2, %t2* %A, i32 0, i32 0
- %A2 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 1
- %A3 = getelementptr %t2, %t2* %A, i32 0, i32 2
- store i8 0, i8* %A2
- call void @llvm.lifetime.start(i64 5, i8* %A2)
- ; CHECK: llvm.lifetime{{.*}}i64 1
- ; CHECK: llvm.lifetime{{.*}}i64 1
- ; CHECK: llvm.lifetime{{.*}}i64 1
- %C = load i8, i8* %A2
- ret void
- }
- %t3 = type {[4 x i16], [4 x i8]}
- define void @test6() {
- ; CHECK-LABEL: @test6(
- %A = alloca %t3
- ; CHECK: alloca i8
- ; CHECK: alloca i8
- ; CHECK: alloca i8
- %A11 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 0
- %A12 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 1
- %A13 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 2
- %A14 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 3
- store i16 11, i16* %A11
- store i16 12, i16* %A12
- store i16 13, i16* %A13
- store i16 14, i16* %A14
- ; CHECK-NOT: store i16 11
- ; CHECK-NOT: store i16 12
- ; CHECK-NOT: store i16 13
- ; CHECK-NOT: store i16 14
- %A21 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 0
- %A22 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 1
- %A23 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 2
- %A24 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 3
- store i8 21, i8* %A21
- store i8 22, i8* %A22
- store i8 23, i8* %A23
- store i8 24, i8* %A24
- ; CHECK: store i8 21
- ; CHECK: store i8 22
- ; CHECK: store i8 23
- ; CHECK-NOT: store i8 24
- %B = bitcast i16* %A13 to i8*
- call void @llvm.lifetime.start(i64 7, i8* %B)
- ; CHECK: lifetime.start{{.*}}i64 1
- ; CHECK: lifetime.start{{.*}}i64 1
- ; CHECK: lifetime.start{{.*}}i64 1
- ret void
- }
|