Skip to content

Instantly share code, notes, and snippets.

@nickdesaulniers
Last active July 2, 2019 01:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nickdesaulniers/089bf56165675065bca830cd7da767d8 to your computer and use it in GitHub Desktop.
Save nickdesaulniers/089bf56165675065bca830cd7da767d8 to your computer and use it in GitHub Desktop.
*** IR Dump After Loop-Closed SSA Form Pass ***
; Function Attrs: noredzone nounwind sspstrong
define hidden void @get_fixed_ranges(i8* nocapture) local_unnamed_addr #0 {
%2 = bitcast i8* %0 to i32*
tail call void @k8_check_syscfg_dram_mod_en() #5
%3 = tail call { i64, i64 } asm sideeffect "1: rdmsr\0A2:\0A .pushsection \22__ex_table\22,\22a\2
2\0A .balign 4\0A .long (1b) - .\0A .long (2b) - .\0A .long (ex_handler_rdmsr_unsafe) - .\0A .popse
ction\0A", "={ax},={dx},{cx},~{dirflag},~{fpsr},~{flags}"(i32 592) #6, !srcloc !3
%4 = extractvalue { i64, i64 } %3, 0
%5 = extractvalue { i64, i64 } %3, 1
%6 = shl i64 %5, 32
%7 = or i64 %6, %4
callbr void asm sideeffect "1:.byte 0x0f,0x1f,0x44,0x00,0\0A\09.pushsection __jump_table, \22aw\
22 \0A\09 .balign 8 \0A\09.long 1b - ., ${2:l} - . \0A\09 .quad ${0:c} + ${1:c} - .\0A\09.popsectio
n \0A\09", "i,i,X,~{dirflag},~{fpsr},~{flags}"(%struct.static_key* getelementptr inbounds (%struct.
tracepoint, %struct.tracepoint* @__tracepoint_read_msr, i64 0, i32 1), i1 false, i8* blockaddress(@
get_fixed_ranges, %8)) #6
to label %native_read_msr.exit [label %8], !srcloc !4
8: ; preds = %1
tail call void @do_trace_read_msr(i32 592, i64 %7, i32 0) #7
br label %native_read_msr.exit
native_read_msr.exit: ; preds = %1, %8
%9 = trunc i64 %4 to i32
store i32 %9, i32* %2, align 4
%10 = lshr i64 %7, 32
%11 = trunc i64 %10 to i32
%12 = getelementptr i8, i8* %0, i64 4
%13 = bitcast i8* %12 to i32*
store i32 %11, i32* %13, align 4
br label %14
14: ; preds = %native_read_msr.exit, %native_read_msr
.exit31
%.034 = phi i32 [ 0, %native_read_msr.exit ], [ %32, %native_read_msr.exit31 ]
%15 = add nuw nsw i32 %.034, 600
%16 = tail call { i64, i64 } asm sideeffect "1: rdmsr\0A2:\0A .pushsection \22__ex_table\22,\22a\
22\0A .balign 4\0A .long (1b) - .\0A .long (2b) - .\0A .long (ex_handler_rdmsr_unsafe) - .\0A .pops
ection\0A", "={ax},={dx},{cx},~{dirflag},~{fpsr},~{flags}"(i32 %15) #6, !srcloc !3
%17 = extractvalue { i64, i64 } %16, 0
%18 = extractvalue { i64, i64 } %16, 1
%19 = shl i64 %18, 32
%20 = or i64 %19, %17
callbr void asm sideeffect "1:.byte 0x0f,0x1f,0x44,0x00,0\0A\09.pushsection __jump_table, \22aw\
22 \0A\09 .balign 8 \0A\09.long 1b - ., ${2:l} - . \0A\09 .quad ${0:c} + ${1:c} - .\0A\09.popsectio
n \0A\09", "i,i,X,~{dirflag},~{fpsr},~{flags}"(%struct.static_key* getelementptr inbounds (%struct.
tracepoint, %struct.tracepoint* @__tracepoint_read_msr, i64 0, i32 1), i1 false, i8* blockaddress(@
get_fixed_ranges, %21)) #6
to label %native_read_msr.exit31 [label %21], !srcloc !4
21: ; preds = %14
tail call void @do_trace_read_msr(i32 %15, i64 %20, i32 0) #7
br label %native_read_msr.exit31
native_read_msr.exit31: ; preds = %14, %21
%22 = trunc i64 %17 to i32
%23 = shl nuw i32 %.034, 1
%24 = add i32 %23, 2
%25 = sext i32 %24 to i64
%26 = getelementptr i32, i32* %2, i64 %25
store i32 %22, i32* %26, align 4
%27 = lshr i64 %20, 32
%28 = trunc i64 %27 to i32
%29 = add i32 %23, 3
%30 = sext i32 %29 to i64
%31 = getelementptr i32, i32* %2, i64 %30
store i32 %28, i32* %31, align 4
%32 = add nuw nsw i32 %.034, 1
%33 = icmp ult i32 %32, 2
br i1 %33, label %14, label %.preheader.preheader
.preheader.preheader: ; preds = %native_read_msr.exit31
br label %.preheader
.preheader: ; preds = %.preheader.preheader, %native_read_msr.exit32
%.133 = phi i32 [ %51, %native_read_msr.exit32 ], [ 0, %.preheader.preheader ]
%34 = add nuw nsw i32 %.133, 616
%35 = tail call { i64, i64 } asm sideeffect "1: rdmsr\0A2:\0A .pushsection \22__ex_table\22,\22a\22\0A .balign 4\0A .long (1b) - .\0A .long (2b) - .\0A .long (ex_handler_rdmsr_unsafe) - .\0A .popsection\0A", "={ax},={dx},{cx},~{dirflag},~{fpsr},~{flags}"(i32 %34) #6, !srcloc !3
%36 = extractvalue { i64, i64 } %35, 0
%37 = extractvalue { i64, i64 } %35, 1
%38 = shl i64 %37, 32
%39 = or i64 %38, %36
callbr void asm sideeffect "1:.byte 0x0f,0x1f,0x44,0x00,0\0A\09.pushsection __jump_table, \22aw\22 \0A\09 .balign 8 \0A\09.long 1b - ., ${2:l} - . \0A\09 .quad ${0:c} + ${1:c} - .\0A\09.popsection \0A\09", "i,i,X,~{dirflag},~{fpsr},~{flags}"(%struct.static_key* getelementptr inbounds (%struct.tracepoint, %struct.tracepoint* @__tracepoint_read_msr, i64 0, i32 1), i1 false, i8* blockaddress(@get_fixed_ranges, %40)) #6
to label %native_read_msr.exit32 [label %40], !srcloc !4
40: ; preds = %.preheader
tail call void @do_trace_read_msr(i32 %34, i64 %39, i32 0) #7
br label %native_read_msr.exit32
native_read_msr.exit32: ; preds = %.preheader, %40
%41 = trunc i64 %36 to i32
%42 = shl nuw i32 %.133, 1
%43 = add i32 %42, 6
%44 = sext i32 %43 to i64
%45 = getelementptr i32, i32* %2, i64 %44
store i32 %41, i32* %45, align 4
%46 = lshr i64 %39, 32
%47 = trunc i64 %46 to i32
%48 = add i32 %42, 7
%49 = sext i32 %48 to i64
%50 = getelementptr i32, i32* %2, i64 %49
store i32 %47, i32* %50, align 4
%51 = add nuw nsw i32 %.133, 1
%52 = icmp ult i32 %51, 8
br i1 %52, label %.preheader, label %53
53: ; preds = %native_read_msr.exit32
ret void
}
*** IR Dump Before MergedLoadStoreMotion ***
; Function Attrs: noredzone nounwind sspstrong
define hidden void @get_fixed_ranges(i8* nocapture) local_unnamed_addr #0 {
%2 = bitcast i8* %0 to i32*
tail call void @k8_check_syscfg_dram_mod_en() #5
%3 = tail call { i64, i64 } asm sideeffect "1: rdmsr\0A2:\0A .pushsection \22__ex_table\22,\22a\2
2\0A .balign 4\0A .long (1b) - .\0A .long (2b) - .\0A .long (ex_handler_rdmsr_unsafe) - .\0A .popse
ction\0A", "={ax},={dx},{cx},~{dirflag},~{fpsr},~{flags}"(i32 592) #6, !srcloc !3
%4 = extractvalue { i64, i64 } %3, 0
%5 = extractvalue { i64, i64 } %3, 1
%6 = shl i64 %5, 32
%7 = or i64 %6, %4
callbr void asm sideeffect "1:.byte 0x0f,0x1f,0x44,0x00,0\0A\09.pushsection __jump_table, \22aw\
22 \0A\09 .balign 8 \0A\09.long 1b - ., ${2:l} - . \0A\09 .quad ${0:c} + ${1:c} - .\0A\09.popsectio
n \0A\09", "i,i,X,~{dirflag},~{fpsr},~{flags}"(%struct.static_key* getelementptr inbounds (%struct.
tracepoint, %struct.tracepoint* @__tracepoint_read_msr, i64 0, i32 1), i1 false, i8* blockaddress(@
get_fixed_ranges, %8)) #6
to label %native_read_msr.exit [label %8], !srcloc !4
8: ; preds = %1
tail call void @do_trace_read_msr(i32 592, i64 %7, i32 0) #7
br label %native_read_msr.exit
native_read_msr.exit: ; preds = %1, %8
%9 = trunc i64 %4 to i32
store i32 %9, i32* %2, align 4
%10 = lshr i64 %7, 32
%11 = trunc i64 %10 to i32
%12 = getelementptr i8, i8* %0, i64 4
%13 = bitcast i8* %12 to i32*
store i32 %11, i32* %13, align 4
br label %14
14: ; preds = %native_read_msr.exit
%15 = tail call { i64, i64 } asm sideeffect "1: rdmsr\0A2:\0A .pushsection \22__ex_table\22,\22a\
22\0A .balign 4\0A .long (1b) - .\0A .long (2b) - .\0A .long (ex_handler_rdmsr_unsafe) - .\0A .pops
ection\0A", "={ax},={dx},{cx},~{dirflag},~{fpsr},~{flags}"(i32 600) #6, !srcloc !3
%16 = extractvalue { i64, i64 } %15, 0
%17 = extractvalue { i64, i64 } %15, 1
%18 = shl i64 %17, 32
%19 = or i64 %18, %16
callbr void asm sideeffect "1:.byte 0x0f,0x1f,0x44,0x00,0\0A\09.pushsection __jump_table, \22aw\
22 \0A\09 .balign 8 \0A\09.long 1b - ., ${2:l} - . \0A\09 .quad ${0:c} + ${1:c} - .\0A\09.popsectio
n \0A\09", "i,i,X,~{dirflag},~{fpsr},~{flags}"(%struct.static_key* getelementptr inbounds (%struct.
tracepoint, %struct.tracepoint* @__tracepoint_read_msr, i64 0, i32 1), i1 false, i8* blockaddress(@
get_fixed_ranges, %20)) #6
to label %native_read_msr.exit31 [label %20], !srcloc !4
20: ; preds = %14
tail call void @do_trace_read_msr(i32 600, i64 %19, i32 0) #7
br label %native_read_msr.exit31
native_read_msr.exit31: ; preds = %14, %20
%21 = trunc i64 %16 to i32
%22 = getelementptr i32, i32* %2, i64 2
store i32 %21, i32* %22, align 4
%23 = lshr i64 %19, 32
%24 = trunc i64 %23 to i32
%25 = getelementptr i32, i32* %2, i64 3
store i32 %24, i32* %25, align 4
%26 = tail call { i64, i64 } asm sideeffect "1: rdmsr\0A2:\0A .pushsection \22__ex_table\22,\22a\22\0A .balign 4\0A .long (1b) - .\0A .long (2b) - .\0A .long (ex_handler_rdmsr_unsafe) - .\0A .popsection\0A", "={ax},={dx},{cx},~{dirflag},~{fpsr},~{flags}"(i32 601) #6, !srcloc !3
%27 = extractvalue { i64, i64 } %26, 0
%28 = extractvalue { i64, i64 } %26, 1
%29 = shl i64 %28, 32
%30 = or i64 %29, %27
callbr void asm sideeffect "1:.byte 0x0f,0x1f,0x44,0x00,0\0A\09.pushsection __jump_table, \22aw\22 \0A\09 .balign 8 \0A\09.long 1b - ., ${2:l} - . \0A\09 .quad ${0:c} + ${1:c} - .\0A\09.popsection \0A\09", "i,i,X,~{dirflag},~{fpsr},~{flags}"(%struct.static_key* getelementptr inbounds (%struct.tracepoint, %struct.tracepoint* @__tracepoint_read_msr, i64 0, i32 1), i1 false, i8* blockaddress(@get_fixed_ranges, %20)) #6
to label %native_read_msr.exit31.1 [label %49], !srcloc !4
.preheader: ; preds = %native_read_msr.exit31.1, %native_read_msr.exit32
%indvars.iv = phi i64 [ 0, %native_read_msr.exit31.1 ], [ %indvars.iv.next, %native_read_msr.exit32 ]
%31 = add nuw nsw i64 %indvars.iv, 616
%32 = trunc i64 %31 to i32
%33 = tail call { i64, i64 } asm sideeffect "1: rdmsr\0A2:\0A .pushsection \22__ex_table\22,\22a\22\0A .balign 4\0A .long (1b) - .\0A .long (2b) - .\0A .long (ex_handler_rdmsr_unsafe) - .\0A .popsection\0A", "={ax},={dx},{cx},~{dirflag},~{fpsr},~{flags}"(i32 %32) #6, !srcloc !3
%34 = extractvalue { i64, i64 } %33, 0
%35 = extractvalue { i64, i64 } %33, 1
%36 = shl i64 %35, 32
%37 = or i64 %36, %34
callbr void asm sideeffect "1:.byte 0x0f,0x1f,0x44,0x00,0\0A\09.pushsection __jump_table, \22aw\22 \0A\09 .balign 8 \0A\09.long 1b - ., ${2:l} - . \0A\09 .quad ${0:c} + ${1:c} - .\0A\09.popsection \0A\09", "i,i,X,~{dirflag},~{fpsr},~{flags}"(%struct.static_key* getelementptr inbounds (%struct.tracepoint, %struct.tracepoint* @__tracepoint_read_msr, i64 0, i32 1), i1 false, i8* blockaddress(@get_fixed_ranges, %38)) #6
to label %native_read_msr.exit32 [label %38], !srcloc !4
38: ; preds = %.preheader
%39 = trunc i64 %31 to i32
tail call void @do_trace_read_msr(i32 %39, i64 %37, i32 0) #7
br label %native_read_msr.exit32
native_read_msr.exit32: ; preds = %.preheader, %38
%40 = trunc i64 %34 to i32
%41 = shl nuw i64 %indvars.iv, 1
%42 = add nuw nsw i64 %41, 6
%43 = getelementptr i32, i32* %2, i64 %42
store i32 %40, i32* %43, align 4
%44 = lshr i64 %37, 32
%45 = trunc i64 %44 to i32
%46 = add nuw nsw i64 %41, 7
%47 = getelementptr i32, i32* %2, i64 %46
store i32 %45, i32* %47, align 4
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
%exitcond = icmp ne i64 %indvars.iv.next, 8
br i1 %exitcond, label %.preheader, label %48
48: ; preds = %native_read_msr.exit32
ret void
49: ; preds = %native_read_msr.exit31
tail call void @do_trace_read_msr(i32 601, i64 %30, i32 0) #7
br label %native_read_msr.exit31.1
native_read_msr.exit31.1: ; preds = %49, %native_read_msr.exit31
%50 = trunc i64 %27 to i32
%51 = getelementptr i32, i32* %2, i64 4
store i32 %50, i32* %51, align 4
%52 = lshr i64 %30, 32
%53 = trunc i64 %52 to i32
%54 = getelementptr i32, i32* %2, i64 5
store i32 %53, i32* %54, align 4
br label %.preheader
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment