Last active
July 2, 2019 01:28
-
-
Save nickdesaulniers/089bf56165675065bca830cd7da767d8 to your computer and use it in GitHub Desktop.
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
*** 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 | |
} |
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
*** 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