|
1 |
| -; RUN: opt -opaque-pointers=0 -passes=instcombine -S %s | FileCheck %s |
| 1 | +; RUN: opt -passes=instcombine -S %s | FileCheck %s |
2 | 2 |
|
3 | 3 | ;; Ensure that debug uses of a select are replaced when the select is replaced
|
4 | 4 | ;; with one of its operands in InstCombine's replacedSelectWithOperand.
|
|
22 | 22 | ;; }
|
23 | 23 |
|
24 | 24 | ;; Look at the instruction:
|
25 |
| -;; %retval.0.i = select i1 %tobool.not.i, %struct.Thing* %2, %struct.Thing* null |
| 25 | +;; %retval.0.i = select i1 %tobool.not.i, ptr %2, ptr null |
26 | 26 | ;; Note that %2 is a bitcast of %0.
|
27 | 27 | ;; InstCombine replaces the use of %retval.0.i in if.then with %0 because
|
28 | 28 | ;; if.then is only branched to when retval.0.is not null. Ensure that debug use
|
29 | 29 | ;; of %retval.0.i is also replaced with %0.
|
30 | 30 |
|
31 | 31 | ; CHECK: if.then:
|
32 |
| -; CHECK-NEXT: call void @llvm.dbg.value(metadata i8* %0, metadata ![[THIS:[0-9]+]], metadata !DIExpression()) |
| 32 | +; CHECK-NEXT: call void @llvm.dbg.value(metadata ptr %0, metadata ![[THIS:[0-9]+]], metadata !DIExpression()) |
33 | 33 | ; CHECK: ![[THIS]] = !DILocalVariable(name: "this",
|
34 | 34 |
|
35 | 35 | target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
36 | 36 | target triple = "x86_64-unknown-linux-gnu"
|
37 | 37 |
|
38 |
| -%struct.Thing = type { i8* } |
| 38 | +%struct.Thing = type { ptr } |
39 | 39 |
|
40 |
| -@glob = external dso_local local_unnamed_addr global i8*, align 8 |
| 40 | +@glob = external dso_local local_unnamed_addr global ptr, align 8 |
41 | 41 |
|
42 | 42 | define dso_local void @_Z3onev() local_unnamed_addr !dbg !29 {
|
43 | 43 | entry:
|
44 |
| - %0 = load i8*, i8** @glob, align 8, !dbg !35 |
45 |
| - call void @llvm.dbg.value(metadata i8* %0, metadata !22, metadata !DIExpression()), !dbg !40 |
46 |
| - %1 = ptrtoint i8* %0 to i64, !dbg !42 |
| 44 | + %0 = load ptr, ptr @glob, align 8, !dbg !35 |
| 45 | + call void @llvm.dbg.value(metadata ptr %0, metadata !22, metadata !DIExpression()), !dbg !40 |
| 46 | + %1 = ptrtoint ptr %0 to i64, !dbg !42 |
47 | 47 | %and.i = and i64 %1, 1, !dbg !43
|
48 | 48 | %tobool.not.i = icmp eq i64 %and.i, 0, !dbg !42
|
49 |
| - %2 = bitcast i8* %0 to %struct.Thing*, !dbg !44 |
50 |
| - %retval.0.i = select i1 %tobool.not.i, %struct.Thing* %2, %struct.Thing* null, !dbg !44 |
51 |
| - call void @llvm.dbg.value(metadata %struct.Thing* %retval.0.i, metadata !33, metadata !DIExpression()), !dbg !45 |
52 |
| - %tobool.not = icmp eq %struct.Thing* %retval.0.i, null, !dbg !46 |
| 49 | + %2 = bitcast ptr %0 to ptr, !dbg !44 |
| 50 | + %retval.0.i = select i1 %tobool.not.i, ptr %2, ptr null, !dbg !44 |
| 51 | + call void @llvm.dbg.value(metadata ptr %retval.0.i, metadata !33, metadata !DIExpression()), !dbg !45 |
| 52 | + %tobool.not = icmp eq ptr %retval.0.i, null, !dbg !46 |
53 | 53 | br i1 %tobool.not, label %if.end, label %if.then, !dbg !47
|
54 | 54 |
|
55 | 55 | if.then: ; preds = %entry
|
56 |
| - call void @llvm.dbg.value(metadata %struct.Thing* %retval.0.i, metadata !48, metadata !DIExpression()), !dbg !51 |
57 |
| - %ptr.i = getelementptr inbounds %struct.Thing, %struct.Thing* %retval.0.i, i64 0, i32 0, !dbg !53 |
58 |
| - %3 = load i8*, i8** %ptr.i, align 8, !dbg !53 |
59 |
| - store i8* %3, i8** @glob, align 8, !dbg !56 |
| 56 | + call void @llvm.dbg.value(metadata ptr %retval.0.i, metadata !48, metadata !DIExpression()), !dbg !51 |
| 57 | + %ptr.i = getelementptr inbounds %struct.Thing, ptr %retval.0.i, i64 0, i32 0, !dbg !53 |
| 58 | + %3 = load ptr, ptr %ptr.i, align 8, !dbg !53 |
| 59 | + store ptr %3, ptr @glob, align 8, !dbg !56 |
60 | 60 | br label %if.end, !dbg !57
|
61 | 61 |
|
62 | 62 | if.end: ; preds = %if.then, %entry
|
|
0 commit comments