brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 8427d38 Raw
62 lines · plain
1; ModuleID = 'PR1657.bc'2; Do not promote getelementptr because it may exposes load from a null pointer3; and store from a null pointer  which are covered by4; icmp eq ptr null, null condition.5; RUN: opt < %s -passes=licm -S | not grep promoted6	%struct.decision = type { i8, ptr }7 8define i32 @main() {9entry:10	br label %blah.i11 12blah.i:		; preds = %cond_true.i, %entry13	%tmp3.i = icmp eq ptr null, null		; <i1> [#uses=1]14	br i1 %tmp3.i, label %clear_modes.exit, label %cond_true.i15 16cond_true.i:		; preds = %blah.i17	%tmp1.i = getelementptr %struct.decision, ptr null, i32 0, i32 0		; <ptr> [#uses=1]18	store i8 0, ptr %tmp1.i19	br label %blah.i20 21clear_modes.exit:		; preds = %blah.i22	call void @exit( i32 0 )23	unreachable24}25 26define i32 @f(ptr %ptr) {27entry:28        br label %loop.head29 30loop.head:              ; preds = %cond.true, %entry31        %x = phi ptr [ %ptr, %entry ], [ %ptr.i, %cond.true ]           ; <ptr> [#uses=1]32        %tmp3.i = icmp ne ptr %ptr, %x          ; <i1> [#uses=1]33        br i1 %tmp3.i, label %cond.true, label %exit34 35cond.true:              ; preds = %loop.head36        %ptr.i = getelementptr i8, ptr %ptr, i32 0          ; <ptr> [#uses=2]37        store i8 0, ptr %ptr.i38        br label %loop.head39 40exit:           ; preds = %loop.head41        ret i32 042}43 44define i32 @f2(ptr %p, ptr %q) {45entry:46        br label %loop.head47 48loop.head:              ; preds = %cond.true, %entry49        %tmp3.i = icmp eq ptr null, %q            ; <i1> [#uses=1]50        br i1 %tmp3.i, label %exit, label %cond.true51 52cond.true:              ; preds = %loop.head53        %ptr.i = getelementptr i8, ptr %p, i32 0          ; <ptr> [#uses=2]54        store i8 0, ptr %ptr.i55        br label %loop.head56 57exit:           ; preds = %loop.head58        ret i32 059}60 61declare void @exit(i32)62