Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[SROA] Also insert a bit piece expression if only one piece is needed
Summary: If SROA creates only one piece (e.g. because the other is not needed), it still needs to create a bit_piece expression if that bit piece is smaller than the original size of the alloca. Reviewers: aprantl Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D16187 llvm-svn: 257795
- Loading branch information
Showing
2 changed files
with
42 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
; RUN: opt -sroa %s -S | FileCheck %s | ||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | ||
|
||
%foo = type { [8 x i8], [8 x i8] } | ||
|
||
declare void @llvm.dbg.declare(metadata, metadata, metadata) #0 | ||
define void @_ZL18findInsertLocationPN4llvm17MachineBasicBlockENS_9SlotIndexERNS_13LiveIntervalsE() { | ||
entry: | ||
%retval = alloca %foo, align 8 | ||
call void @llvm.dbg.declare(metadata %foo* %retval, metadata !1, metadata !7), !dbg !8 | ||
; Checks that SROA still inserts a bit_piece expression, even if it produces only one piece | ||
; (as long as that piece is smaller than the whole thing) | ||
; CHECK-NOT: call void @llvm.dbg.value | ||
; CHECK: call void @llvm.dbg.value(metadata %foo* undef, i64 0, metadata !1, metadata ![[BIT_PIECE:[0-9]+]]), !dbg | ||
; CHECK-NOT: call void @llvm.dbg.value | ||
; CHECK: ![[BIT_PIECE]] = !DIExpression(DW_OP_bit_piece, 64, 64) | ||
%0 = bitcast %foo* %retval to i8* | ||
%1 = getelementptr inbounds i8, i8* %0, i64 8 | ||
%2 = bitcast i8* %1 to %foo** | ||
store %foo* undef, %foo** %2, align 8 | ||
ret void | ||
} | ||
|
||
attributes #0 = { nounwind readnone } | ||
|
||
!llvm.dbg.cu = !{} | ||
!llvm.module.flags = !{!0} | ||
|
||
!0 = !{i32 2, !"Debug Info Version", i32 3} | ||
!1 = !DILocalVariable(name: "I", scope: !2, file: !3, line: 947, type: !4) | ||
!2 = distinct !DISubprogram(name: "findInsertLocation", linkageName: "_ZL18findInsertLocationPN4llvm17MachineBasicBlockENS_9SlotIndexERNS_13LiveIntervalsE", scope: !3, file: !3, line: 937, isLocal: true, isDefinition: true, scopeLine: 938, flags: DIFlagPrototyped, isOptimized: true) | ||
!3 = !DIFile(filename: "none", directory: ".") | ||
!4 = !DICompositeType(tag: DW_TAG_class_type, name: "bundle_iterator<llvm::MachineInstr, llvm::ilist_iterator<llvm::MachineInstr> >", scope: !5, file: !3, line: 163, size: 128, align: 64, elements: !6, templateParams: !6, identifier: "_ZTSN4llvm17MachineBasicBlock15bundle_iteratorINS_12MachineInstrENS_14ilist_iteratorIS2_EEEE") | ||
!5 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "MachineBasicBlock", file: !3, line: 68, size: 1408, align: 64, identifier: "_ZTSN4llvm17MachineBasicBlockE") | ||
!6 = !{} | ||
!7 = !DIExpression() | ||
!8 = !DILocation(line: 947, column: 35, scope: !2) |