brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 6b58a28 Raw
55 lines · plain
1; RUN: opt < %s -passes='mem2reg' -S | FileCheck %s2target datalayout = "e-p:64:64"3 4; An intrinsic without any expressions should always be converted.5define i64 @foo0(i64 %arg) {6  %arg.addr = alloca i647  store i64 %arg, ptr %arg.addr8  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !26, metadata !DIExpression()), !dbg !409  ; CHECK-LABEL: @foo010  ; CHECK-SAME:    (i64 [[arg:%.*]])11  ; CHECK-NEXT:    #dbg_value(i64 [[arg]], {{.*}}, !DIExpression(),12  %val = load i64, ptr %arg.addr13  ret i64 %val14}15 16; An intrinsic with a single deref operator should be converted preserving the deref.17define i32 @foo1(ptr %arg) {18  %arg.indirect_addr = alloca ptr19  store ptr %arg, ptr %arg.indirect_addr20  call void @llvm.dbg.declare(metadata ptr %arg.indirect_addr, metadata !25, metadata !DIExpression(DW_OP_deref)), !dbg !4021  ; CHECK-LABEL: @foo122  ; CHECK-SAME:    (ptr [[arg:%.*]])23  ; CHECK-NEXT:    #dbg_value(ptr [[arg]], {{.*}}, !DIExpression(DW_OP_deref),24  %val = load i32, ptr %arg25  ret i32 %val26}27 28 29; An intrinsic with multiple operators should cause us to conservatively bail.30define i32 @foo2(ptr %arg) {31  %arg.indirect_addr = alloca ptr32  store ptr %arg, ptr %arg.indirect_addr33  call void @llvm.dbg.declare(metadata ptr %arg.indirect_addr, metadata !25, metadata !DIExpression(DW_OP_deref, DW_OP_plus_uconst, 2)), !dbg !4034  ; CHECK-LABEL: @foo235  ; CHECK-NEXT:     #dbg_value(ptr poison, {{.*}}, !DIExpression(DW_OP_deref, DW_OP_plus_uconst, 2),36  %val = load i32, ptr %arg37  ret i32 %val38}39 40declare void @llvm.dbg.declare(metadata, metadata, metadata)41 42!llvm.module.flags = !{!1, !2}43!llvm.dbg.cu = !{!7}44 45!1 = !{i32 7, !"Dwarf Version", i32 4}46!2 = !{i32 2, !"Debug Info Version", i32 3}47!3 = !DIBasicType(name: "wide type", size: 512)48!4 = !DIBasicType(name: "ptr sized type", size: 64)49!7 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !8, producer: "clang", emissionKind: FullDebug)50!8 = !DIFile(filename: "test.ll", directory: "")51!10 = distinct !DISubprogram(name: "blah", linkageName: "blah", scope: !8, file: !8, line: 7, unit: !7)52!25 = !DILocalVariable(name: "blah", arg: 1, scope: !10, file: !8, line: 7, type:!3)53!26 = !DILocalVariable(name: "ptr sized var", arg: 1, scope: !10, file: !8, line: 7, type:!4)54!40 = !DILocation(line: 7, column: 35, scope: !10)55