1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes='default<O2>' -S < %s | FileCheck %s 3@a = internal global i32 0, align 4 4@c = internal global i32** @b, align 8 5@b = internal global i32* null, align 8 6@e = internal global i32* @d, align 8 7@d = internal global i32 0, align 4 8 9define i32 @main() { 10; CHECK-LABEL: @main( 11; CHECK-NEXT: entry: 12; CHECK-NEXT: store i1 true, i1* @a, align 4 13; CHECK-NEXT: [[TMP0:%.*]] = load i32*, i32** @e, align 8 14; CHECK-NEXT: store i32 0, i32* [[TMP0]], align 4 15; CHECK-NEXT: store i32* null, i32** @e, align 8 16; CHECK-NEXT: ret i32 0 17; 18entry: 19 %h = alloca i32*, align 8 20 %i = alloca i32*, align 8 21 %j = alloca i32*, align 8 22 %0 = bitcast i32** %h to i8* 23 store i32* @a, i32** %h, align 8 24 %1 = bitcast i32** %i to i8* 25 %2 = bitcast i32** %j to i8* 26 store i32* @a, i32** %j, align 8 27 %3 = load i32*, i32** %j, align 8 28 store i32 1, i32* %3, align 4 29 store i32* @a, i32** %i, align 8 30 %4 = load i32*, i32** %i, align 8 31 %5 = load i32**, i32*** @c, align 8 32 store i32* %4, i32** %5, align 8 33 %6 = load i32*, i32** %h, align 8 34 %call = call i32* @bar(i32* %6) 35 %7 = bitcast i32** %j to i8* 36 %8 = bitcast i32** %i to i8* 37 %9 = bitcast i32** %h to i8* 38 ret i32 0 39} 40 41define internal i32* @bar(i32* %g) { 42entry: 43 %g.addr = alloca i32*, align 8 44 store i32* %g, i32** %g.addr, align 8 45 %0 = load i32*, i32** @e, align 8 46 store i32 0, i32* %0, align 4 47 %1 = load i32*, i32** %g.addr, align 8 48 %2 = load i32, i32* %1, align 4 49 %tobool = icmp ne i32 %2, 0 50 br i1 %tobool, label %if.end, label %if.then 51 52if.then: ; preds = %entry 53 call void @foo() 54 br label %if.end 55 56if.end: ; preds = %if.then, %entry 57 store i32* null, i32** @e, align 8 58 %3 = load i32*, i32** @b, align 8 59 ret i32* %3 60} 61 62declare void @foo() 63 64